CCF2018-12-2小明终于放学了
Posted awangkuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF2018-12-2小明终于放学了相关的知识,希望对你有一定的参考价值。
2018-12-2的ccf测试题中,有一道小明放学的题,我写了两个方向的代码,在找不到逻辑的情况下都是60分,在此处浪费了很多时间,最后搜索时候听人说,原来60分的大部分是因为内存爆掉了,所以我改了类型为long int,不行,又改成了long long,终于通过了,不得不吐槽一下ccf的测试系统,明明出错也莫得错误类型提示,太为难胖虎了。
类型名称 字节数 取值范围
signed char 1 -128~+127
short int 2 -32768~+32767
int 4 -2147438648~+2147438647
long int 4 -2147438648~+2141438647
long long int 8 -9223372036854775808~+9223372036854775807
primer中long 32b long long 64b
long int即long,给人的感觉好像是长整型,但实际上,它和int一样,只有32位。
既然long int与int相同,那么为什么还有long int这种尴尬的类型呢?
原因是早期的C编译器定义了long int占用4个字节,int占用2个字节,long int是名副其实的长整型。在ANSI C的标准中,对长整型的定义也是long int应该至少和int一样长,而不是long int 一定要比int占用存储字节长。所以,正确的关系应该是——
long≥int≥short
新版的C/C++标准兼容了早期的这一设定。
参考链接 https://blog.csdn.net/CV_Jason/article/details/85244813
#include <iostream> using namespace std; int main() { int r,y,g; cin>>r>>y>>g; int n; cin>>n; int k,t; //分别是红灯,绿灯,黄灯 //其中黄灯也是不允许通过的 long long result=0; for(int i=0;i<n;i++) { cin>>k>>t; if(k==0) { result+=(long long)t; } else if(k==1) { //一开始的它是红灯 //首先,我们先将多余的并不怎么影响判断的周期模掉 long long a=result%(r+y+g); if(a<=t) //还须继续等待 { result+=(long long)(t-a); } else if(a-t>=g && a-t<=g+y) //过了等待的最佳时机 { result+=(long long)(g+y+t-a+r); } else if(a>t+g+y) { result +=(long long)(t+(r+g+y)-a); } } else if(k==2) { //一开始它是黄灯 long long a=result%(r+y+g); if(a<=t) { result+=(long long)(t+r-a); } else if(a>t && a<t+r) { result+=(long long)(r-(a-t)); } else if(a>=t+r+g && a<r+y+g) //再次与成功失之交臂 { result+=(long long)(r+y+g-a+t+r); } } else if(k==3) { //一开始它是绿灯 long long a=result%(r+y+g); if(a>t && a<=t+y+r) { result+=(long long)((r+y)-(a-t)); } } } cout<<result<<endl; return 0; }
以上是关于CCF2018-12-2小明终于放学了的主要内容,如果未能解决你的问题,请参考以下文章