#include <iostream>
using namespace std;
int main()
{
int light[3];
// 输入顺序 red yellow green
// 红绿灯顺序 0 yellow 1 red 2 green
cin>>light[1]>>light[0]>>light[2];
int n;
cin>>n;
int i,k,t;
// sum为一个循环红绿灯的时长
// ans为自出发到当前的总时长
// last为最后一个循环的时长
int sum,last;
long long ans;
sum=light[0]+light[1]+light[2];
for(i=0,ans=0;i<n;i++){
cin>>k>>t;
if(k==0){ // 道路
ans+=t;
}
else{ // 路口
// 先进行k的转化,与数组对应,原k,1,2,3,分别代表红,黄,绿
if(k==2){
k=0;
}
else if(k==3){
k=2;
}
//当k与数组对应后,进行相应运算,先将最后一个循环的时长算出
last=(ans+light[k]-t)%sum;
while(last>light[k]){
last-=light[k];
k=(k+1)%3;
}
if(k==1){
ans=ans+light[k]-last;
}
if(k==0){
ans=ans+light[k]-last+light[k+1];
}
}
}
cout<<ans;
return 0;
}
CCF 2018年12月第二题 小明放学
原创
©著作权归作者所有:来自51CTO博客作者饮闲的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
铁人三项第二场--我做的题
长城板第二场,我做到的题【队友带飞】
栈溢出 格式化字符串漏洞 长城杯 pwn misc -
2018年1月12日
老家的雪很美,很大。。。。
p2p wpf linq