关于卡常
正文
快速的 I/O 方法
当遇到输入量巨大的题目时,正常情况下的 I/O 函数可能会导致 TLExceeded,而此时我们有两种方法可以加快此过程:
- 关闭同步输入输出流
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
//注意,在进行此操作后,应避免混用 cin 与 scanf,cout 与 printf,以防产生未知错误
- 更快的读入方式
int read(){
int num = 0, fh = 1;
char c = getchar();
while(!isdigit(c))
c == '-' ? fh = -fh : false, c = getchar();
while(isdigit(c))
num = num * 10 + c - '0', c = getchar();
return num * fh;
}
//好像把 isdigit(c) 改成 c >= '0' && c <= '9' 会更快一点点?但是是真的一点点
向上取整
在需要向上取整的时候,除非在万不得已的情况下,否则请避免使用 ceil()
,该函数在某些情况下可能会导致本就比较卡的程序 TLE,并且和 Ofast 一同食用时可能会导致运行出错(可能?)。可以用以下写法来实现向上取整的功能:
x = ceil(x / y); //Time Limit Exceeded
x = (x - 1) / y + 1; //Accepted
奇奇怪怪的火车头
不知道啥时候能用上的卡常火车头,但是当真的不知道怎么卡常的时候可以试试:code
STL 之关联式容器与无序关联式容器
当需要清空 map
or unordered map
内的元素时,在某些情况下,使用 clear()
会比使用 erase(begin())
来得慢,例:link。
变量
在非必要的情况下,可以尝试将 long long
之类的长整型或浮点数改为 int
、short
之类的,以减小常数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】