卡时
众所周知,在各大计算机竞赛的赛场上,总会有那么一样东西令人头疼,令暴力爆零,令搜索欲哭无泪;在各大在线评测系统上,总会有那么三个字母教 失败,教 无奈,教 一个点都拿不到。没错,那就是 T-L-E。
今天就来分享分享怎么避免这三个大字的出现。
正文
卡时,顾名思义,就是卡时间,用尽时间限制中的每一微秒,搜索的话就算没搜完,把局部最小值输出至少有可能 A,当然如果你的算法太差也顶多只能把 变成
那么开始吧!
1.代码
直接放代码:(递归同理我就不再放一遍了)
1 |
|
2.讲解
-
#include<cmath>
头文件记得加上
-
"if (i >= 500000000 && i % 1000000 == 0 && clock() >= 990)"
重点!
i >= 500000000
是你估计的该循环体能在规定时间能执行的次数,往小估计一点!不然程序来不及判断
clock() >= 990
就超时了。i % 1000000 == 0
因为
clock
函数的常数很大,尽量少是执行他, 所以加这个来减少clock()
的执行次数, 这个数别设太大,不然也容易没卡住而超时。clock() >= 990
整个卡时中最重要的部分,注意两点:一、
990
这个数字取决于操作系统,因为 的CLOCKS_PER_SEC
是 , 下是 ,也就是 的clock()
返回值单位为毫秒, 是微秒,也就是说这个卡时程序要是在 上测 应该为 。**二、**不要太贪了, 秒的题开个 就行了,可别真开到开 。- 关于三者的顺序
我们知道,几个
&&
或||
隔开的语句顺序不一样可能会有不同的结果,因为如果计算机通过靠前的语句能判断整个语句的布尔值就不会执行后面的,(如&&
之间出现false
,||
之间出现true
),所以,我们应该将耗时少的判定放在前面,耗时>=
%
clock()
,所以我们按这个顺序放置。否则,卡时的耗时甚至要比搜索本身耗时高,得不偿失。 -
exit(EXIT_SUCCESS)
- “相当于
return 0
,与return 0
不同的是,无论他在哪执行(包括除main
以外的函数),整个程序立即结束。依靠递归的搜索不能用return 0
来停止,需要用它。
- “相当于