一些学习编程准备CCPC过程中需要知道的东西


前言

准备这类竞赛的话,除了学习如何编写对应题目的代码之外,还需要掌握各种各样的小技巧,以及学会和竞赛相关的一些知识,所以这里打算记录一些和竞赛相关的部分内容。(还没写完,持续更新)

PS:以下内容不建议直接观看,这些知识虽然有用,但是不是任何时候都用得上,建议需要用上相关知识的时候再过来学习,这样比较容易记住。不过如果你确实对这些内容感兴趣的话,那么现在直接看也无妨。

获取时间程序运行时间

竞赛做题不只是要求写出能够完成指定功能的代码,还要求程序能够在只使用限定的内存大小并且在指定的时间之内得出正确答案并结束程序,也就是所谓的时空限制(时间和空间限制),时空限制一般会随着题目一起给出来,比如下图。在这里插入图片描述
自己代码用到的空间一般是通过自己分析自己的代码得出来的,比如这道题我只用到了ab两个int型变量,一个int是4字节,所以我这道题就只用了8B的空间,计算就知道了。

自己的代码运行所需时间的话,有时候也能通过分析代码的出来,但是有时候分析起来比较困难,又或者是你不知道怎么分析或者对于某些你没考虑到的数据不知道运行时间是多少(有时候题目会附赠一些测试数据,供你对自己的代码进行测试,这时候也可以用代码算出来具体运行了多长时间),这时候就可以用到头文件ctime里面的clock函数。

clock函数

clock()函数在头文件ctime,使用之前一定要记得include< ctime>(以及实际上传代码的时候记得把clock函数以及其他调试用代码删掉)。看过紫书《算法竞赛入门经典》的话,应该会在27页的时候看到作者用了clock这个函数获取了程序运行了多长时间。但是实际上除了用clock来获取程序运行了多长时间,还可以调用两次clock()并且将两次返回的值相减来得出两次clock函数之间过了多长时间。

比如我自己就写了一个代码,可以计算递归法求斐波那契数列时,耗时是多少。

#include<cstdio>
#include<ctime>
using namespace std;
long long f(long long);
int main(){
   
    for(int i=1; i<=50; i++){
   
        int start, end;
        start = clock();
        long long ans = f(i);
        end = clock();
        printf("i:%d f:%lld time:%f\n", i, ans, (
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值