其他分享
首页 > 其他分享> > 201812-2小明放学

201812-2小明放学

作者:互联网

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题目感觉不是很难,一个坑就是要用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%lld\n",&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;
}

欢迎交流指导。

标签:小明,int,scanf,long,201812,&&,time,放学,lld
来源: https://blog.csdn.net/L_xqqzldh/article/details/87910800