http://www.docin.com/p-686190550.html
exit(0);
搜索到答案后(只需一个答案)强制退出函数
ios::sync_with_stdio(0);//cincout加速
求最大值的最小化,直接联想到二分
读入优化
inline int read()
{
int k=1;int x=0;
char c=getchar();
while ((c<'0'||c>'9')&&c!='-')c=getchar();
if(c=='-')
k=-1,c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-'0',c=getchar();
return k*x;
}
读入优化2
inline char gc(){
static char now[1<<16],*S,*T;
if (T==S){
T=(S=now)+fread(now,1,1<<16,stdin);
if (T==S)
return EOF;
}
return *S++;
}
inline int read(){
int x=0;char ch=gc();
while(ch<'0'||ch>'9') ch=gc();
while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();
return x;
}
*** 输出优化***
inline void print(long long x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
print(x/10);
putchar(x%10+'0');
}
硬核优化
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
线性筛素数
#define SIZE 1000000
int main()
{
int check[SIZE] = {0};//元素值为0代表是素数
int prime[SIZE] = {0};
int pos=0;
int flag;
for (int i = 2 ; i < SIZE ; i++)
{
if (!check[i])//如果是素数
prime[pos++] = i;
for (int j = 0 ; j < pos && i*prime[j] < SIZE ; j++)
{
check[i*prime[j]] = 1;//筛掉
//标注一
if (i % prime[j] == 0)
break;
}
}
printf("%.2f", (double)clock()/CLOCKS_PER_SEC);
return 0;
}
高精度压位
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#define p 8//要压的位数
#define carry 100000000//相应的10的P次方 用于进位
//这样如果要改变压位的位数只要改这里就可以
using namespace std;
const int Maxn=50001;
char s1[Maxn],s2[Maxn];
int a[Maxn],b[Maxn],ans[Maxn];
int change(char s[],int n[])//压位的核心部分
{
char temp[Maxn];//中间变量 记录每p位的数
int len=strlen(s+1),cur=0;
while(len/p){//如果len大于等于p
strncpy(temp,s+len-p+1,p);//从后面截出来p位数
n[++cur]=atoi(temp);//把temp搞成数字
len-=p;//继续下p位
}
if(len){//如果最后len不是正好p的倍数 也就是还剩下点不够p位的
memset(temp,0,sizeof(temp));
strncpy(temp,s+1,len);//全截下来
n[++cur]=atoi(temp);//赋上
}
return cur;//返回一个位数
}
//这里就是(二)中的内容了 计算正常计算就行
int add(int a[],int b[],int c[],int l1,int l2)
{
int x=0,l3=max(l1,l2);
for(int i=1;i<=l3;i++){
c[i]=a[i]+b[i]+x;
x=c[i]/carry;//进位
c[i]%=carry;
}
while(x>0){c[++l3]=x%10;x/=10;}
return l3;//返回答案的位数
}
void print(int a[],int len)
{
printf("%d",a[len]);//处理高位
for(int i=len-1;i>=1;i--)printf("%0*d",p,a[i]);//输出p位 不足补0
printf("
");
}
int main()
{
// freopen("t.in","r",stdin);
// freopen("t.out","w",stdout);
scanf("%s%s",s1+1,s2+1);//读入两个字符串
int la=change(s1,a);//将s1这个字符串转化为a这个整型数组
int lb=change(s2,b);//同上
int len=add(a,b,ans,la,lb);
//计算长度为la的a数组和长度为lb的b数组最后把答案赋给ans数组 并顺便计算出ans的长度(便于输出)
print(ans,len);//输出函数
}
建图
void add(int u,int v,int w)
{
t[++num]=(node){ head[u],v,w };
head[u]=num;
}
(a + b) % p = (a%p + b%p) %p (对)
(a - b) % p = (a%p - b%p) %p (对)
(a * b) % p = (a%p * b%p) %p (对)
(a / b) % p = (a%p / b%p) %p (错)