一、卡时简介

  卡时是一个竞赛时常用的技巧

  有些题目我们想不到完美算法就只能用暴力解决,但是此类方法一般时间复杂度较高,此时我们需要进行卡时

  通俗来讲就是进行一个时间限制,让程序在达到这个时间后立马退出,输出当前最优方案,或许能碰中正确答案

  这样我们的程序在测试时就不会超时,导致没有得分

二、具体实现

  我们以a+b为例

  首先在程序开头就保存好开始运行的时间,记住一定要 写在最前面

  在中间加上条件限制 clock()-ti<sec   目前时间减去开始时间小于限制时间sec

  clock() 返回的是当前时间值,单位是毫秒ms

  又如在搜索中我们可以在每一层加上这个判断,如果时间不够了,立马 return 退出

  限制时间不要卡的太紧,因为我们要留出输出或者退出递归的时间,具体情况请具体考虑

参考代码:

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#define sec 1000
using namespace std; int ti;
int main()
{
ti=clock();
int a,b;
freopen("ab.in","r",stdin);
freopen("ab.out","w",stdout);
scanf("%d%d",&a,&b);
while (clock()-ti<sec);
cout<<a+b<<endl;
return ;
}

用 lemon 评测,得到以下结果:

信息竞赛程序卡时_C++-LMLPHP

  比限制用时还快了2ms,但这并不意味着我们要把时间限制调多2ms

  毕竟保险为好,因为一旦超时得分就会为0,失去的会更多

(最后我才不会告诉你这种卡时在正式比赛中是错的23333333)

版权所有,转载请联系作者,违者必究

QQ:740929894

05-27 23:28