卡时
卡时
背景
有的时候,我们的搜索会搜很很很很很久,会
什么是卡时
卡时,顾名思义,卡时间,就是我们要用一个东西记录当前的时间,如果快要超时了,输出当前最优解,结束。
实现
朴素版(错误
#include<bits/stdc++.h>
//#include<ctime>
//如果你不用bits/stdc++.h那么一定要加ctime
using namespace std;
int st;
signed main(){
st = clock();//记录一下当前的时间的
while(1){//假装在搜索
if(clock()-st >= 0.95) break;
//如果现在时间-开始时间要超过1s了,退出
}
cout << 52520 << endl;//输出当前搜索出的最优解
return 0;
}
这时,如果你交到洛谷上,你会惊奇的发现,你的每个测试点都在
朴素版
我们只要一个东西,CLOCK_PEP_SEC
,这个用来存当前系统
#include<bits/stdc++.h>
using namespace std;
int st;
signed main(){
st = clock();//记录一下当前的时间的
while(1){//假装在搜索
if(clock()-st >= 0.95*CLOCK_PEP_SEC) break;
//如果现在时间-开始时间要超过1s了,退出
//CLOCK_PEP_SEC是1s时间单位的个数
}
cout << 52520 << endl;//输出当前搜索出的最优解
return 0;
}
优化版
我们又发现这里有一个实数乘法,众所周知……
如果我们说加法的时间是
,那么减法也是 ,乘法呢?
没有那么多,也就。
除法呢?
没有那么多,也就吧。
这里虽然是乘法,但是是实数,我们想让它成为整数乘法,怎么弄?两边同乘以
#include<bits/stdc++.h>
#include<ctime>
using namespace std;
int st;
signed main(){
st = clock();//记录一下当前的时间的
while(1){//假装在搜索
if((clock()-st)*1000 >= 950*CLOCK_PEP_SEC) break;
}
cout << 52520 << endl;//输出当前搜索出的最优解
return 0;
}
最终 版
#include<bits/stdc++.h>
#include<ctime>
using namespace std;
int st;
void dfs(){
if(clock()-st*1000 >= 950*CLOCK_PEP_SEC){
cout << 52520 << endl;//输出当前最优解
exit(0);//退出整个程序,约等于return 0;
}
dfs();
}
signed main(){
st = clock();//记录一下当前的时间的
dfs();
return 0;
}
卡多久
那就
所以综上所述,大概
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具