首页 > 编程知识 正文

小明放学回来了,小明4时20分放学

时间:2023-05-06 07:33:10 阅读:282370 作者:598




题目感觉不是很难,一个坑就是要用long long类型,int型会溢出;再一个就是分类讨论的时候一定要仔细,我就是在第三种k==3里面把一个y写成r了,一遍一遍的抓头发,幸好最后改过来了。

#include<stdio.h>int main(){long long T=0,wait; //T为总时间,wait为在路口等待的时间 long long r,y,g,n,b; scanf("%lld%lld%lldn",&r,&y,&g);long long sum=r+g+y;scanf("%lld",&n);for(int i=0;i<n;i++){int k,time;scanf("%d%d",&k,&time);if(k==0){ //若为一段路,直接加上通过这段路所用时间 T+=time;} else {b=T%sum; //到这个红绿之前所用时间T取余sum 确保b是在一个红绿灯周期内 if(k==1){ //出发时是红灯 if(b-time<0) wait=time-b; //到达时未变色还是红灯 else if(b-time<g) wait=0; //到达时变为绿灯 //下面两句可以合成一句 else wait=63-b; else if(b-time-g>0&&b-time-g<y) wait=sum-b+time; //到达时变为黄灯 wait=(y-(b-time-g)需等待黄灯秒数)+r秒红灯 else wait=sum-b+time; //到达时由红变绿变黄又变红 wait=r秒红灯-(b-time-g秒绿灯-y秒黄灯) }else if(k==2){ //出发时是黄灯 if(b-time<0) wait=time-b+r; //到达时黄灯未变色else if(b-time<r) wait=r-(b-time); //到达时变为红灯else if(b-time-r>=0&&b-time-r<=g) wait=0; // 到达时变为绿灯else wait=y-(b-time-r-g)+r; //到达时又变为黄灯 }else{ //出发时是绿灯 if(b-time<0) wait=0; //到达时绿灯未变色else if(b-time>=0&&b-time<y) wait=r+y-(b-time); //到达时变为黄灯 else if(b-time-y>=0&&b-time-y<r) wait=r-(b-time-y); //到达时变为红灯 else wait=0; //到达时变为绿灯 }T+=wait; //加上在每个路口等待的时间 }}printf("%lld",T);return 0;}

欢迎交流指导。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。