CCF-CSP备考记录:201812-2 小明放学
题目
思路
[略](回头补充)
经验
计算总时间用long long型,否则会溢出。
由于路口数最多为10^5,所以若算法不够模型化就容易超时。
100分c++代码:
#include <iostream>
using namespace std;
int main() {
int n,led[3]; //0,1,2 红 绿 黄
cin>>led[0]>>led[2]>>led[1];
cin>>n;
long long all=0;
int k,t,last; //k=1,2,3 红 黄 绿
int leds=led[0]+led[1]+led[2];
for(int i=0; i<n; i++) {
cin>>k>>t;
if(k==0) all+=t;
else {
if(k==1) last=(all+led[0]-t)%leds;; //出发时为红灯
if(k==2) last=(all+leds-t)%leds;; //黄
if(k==3) last=(all+led[1]+led[0]-t)%leds;; //绿
//last=(all+led[b]-t)%leds;
if(last<led[0]) all+=led[0]-last;//到路口时为红灯
else if(last<led[0]+led[1]) continue;//绿灯
else all+=led[0]+leds-last;//黄灯
}
}
cout<<all;
return 0;
}
THE END!