CSP 201812-2 小明上学
作者:互联网
问题描述:
解题思路:
- 由于数据的量较大,需要使用long long来存储结果,否则会爆掉结果只能得到一部分的分
- 可以类比时钟,将红绿灯的变换当成时钟的运转,这样用模运算来断定红绿灯在到达时处于什么颜色
- 注意看前一题上学,我做的时候没看,导致以为黄灯能直接走,卡了很久
代码实现:
1 #include<iostream> 2 3 using namespace std; 4 5 int n; 6 int dur[3]; 7 int light;//当前是什么灯 8 int cost;//这段路程要花多少时间 9 int wait; 10 long long sum=0;//总时间 11 12 void getwait(int l,int remain) 13 { 14 int j; 15 if(l==1) 16 j=0; 17 else if(l==2) 18 j=2; 19 else 20 j=1; 21 int arit = (sum+dur[j]-remain)%(dur[2]);//处于什么段 22 //判断是不是红灯 23 if(arit<dur[0]) 24 wait = dur[0]-arit; 25 //是不是黄灯 26 else if(arit>=dur[1]) 27 wait=dur[0]+dur[2]-arit; 28 else 29 wait = 0; 30 } 31 int main() 32 { 33 cin>>dur[0]>>dur[2]>>dur[1]; 34 dur[1]+=dur[0]; 35 dur[2]+=dur[1]; 36 cin>>n; 37 while(n--) 38 { 39 cin>>light>>cost; 40 if(!light)//单纯的走一段路 41 { 42 sum+=cost; 43 }else{ 44 getwait(light,cost); 45 sum+=wait; 46 } 47 48 } 49 cout<<sum; 50 return 0; 51 }
总结:
需要注意题中所给的条件
观察数据的大小,判断是否会超出存储范围。
标签:小明,int,sum,long,201812,cost,dur,CSP,wait 来源: https://www.cnblogs.com/Crossea/p/11285921.html