• 信息竞赛程序卡时_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

  • 相关阅读:
    基准测试工具
    性能调优-硬盘方面,操作系统方面,文件系统方面
    算法笔记_174:历届试题 地宫取宝(Java)
    算法笔记_173:历届试题 斐波那契(Java)
    算法笔记_172:历届试题 波动数列(Java)
    算法笔记_171:历届试题 小朋友排队(Java)
    算法笔记_170:历届试题 分糖果(Java)
    算法笔记_169:历届试题 兰顿蚂蚁(Java)
    算法笔记_168:历届试题 矩阵翻硬币(Java)
    算法笔记_167:算法提高 矩阵翻转(Java)
  • 原文地址:https://www.cnblogs.com/hadilo/p/5754172.html
Copyright © 2020-2023  润新知