zoukankan      html  css  js  c++  java
  • 信息竞赛程序卡时_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

  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/hadilo/p/5754172.html
Copyright © 2011-2022 走看看