信息竞赛程序卡时_C++

一、卡时简介

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

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

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

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

二、具体实现

  我们以a+b为例

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

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

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

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

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

 

参考代码:

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #include<ctime>
 8 #define sec 1000
 9 using namespace std;
10 
11 int ti;
12 int main()
13 {
14     ti=clock();
15     int a,b;
16     freopen("ab.in","r",stdin);
17     freopen("ab.out","w",stdout);
18     scanf("%d%d",&a,&b);
19     while (clock()-ti<sec);
20     cout<<a+b<<endl;
21     return 0;
22 }

 

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


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

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

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

  

 

 

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

QQ:740929894

posted @ 2016-08-09 18:01  Hadilo  阅读(3830)  评论(2编辑  收藏  举报