关于卡常与卡时(玄学)
卡常
1. 什么是卡常
“卡掉时间复杂度的常数”简称“卡常”。“卡常”显而易见就是让你的代码更快,取得更好的成绩!像cin、cout的常数比 scanf、printf差,而以此替换、改进及是“卡常”。
2. 怎么实现卡常
卡常的方法有十分多,有快读快输、改变算法(同类型)、开O2优化(应该…算吧)…
快读快输
简单易打版(数据量大时比系统内置的快),还有更快的,可以感性学习。
//快读
inline void read(int &z)
{
z=0;
int ftr=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') ftr=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
z=(z<<3)+(z<<1)+ch-'0';
ch=getchar();
}
z*=ftr;
}
//快输
inline void write(int num){
int op[30],tot=0;
if(num<0){
putchar('-');
num=-num;
}
while(num!=0){
op[++tot]=num%10;
num/=10;
}
while(tot) putchar(op[tot--]+'0');
putchar('\n');
}
最大最小
有时自己手打的max、min会比系统的快。
inline int mymax(int pp,int oo) {return pp>oo?pp:oo;}
inline int mymin(int pp,int oo) {return pp 部分用来卡常的东西 inline 及把函数带入代码直接使用,节省部分用函数的时间。 register 寄存器,让变量使用等一系列变快。(不能开太多) … 改变算法(同类型) 举例子: 像线段树,在部分情况下,树状数组的时间复杂度会比其优。 卡常部分结束了 O_O 卡时 1. 什么是卡时 “卡时间以获得更准确的答案”简称“卡时”。“卡时”很简单,像模拟退火这种算法就会用卡时以让答案更精确。 2. 怎么实现卡时 有个名为clock()的函数,返回程序运行时间,然后再看题目时间限制,做循环至时间的极限,让答案更准确,正确率更高。 例题:P1337 [JSOI2004] 平衡点 / 吊打XXX 或者计算进入循环的次数,然后大概猜一下时间限制下最多能做多少次,到达极限就退出,输出答案。 卡时部分结束了 O π \pi πO 谢谢观看!!!o( ̄▽ ̄)o 其实还有O优化和火车头(不推荐) #pragma GCC optimize(3) #pragma GCC target("avx") #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") #pragma GCC optimize(2)