(算法练习)——201812-2小明放学(CCF模拟)

这一题特别想吐槽,一开始考虑错了,在纸上画不清楚,后来重新拿了草稿纸,确定划得对了,提交,60分!!!why!!后来注意到范围的问题,于是把变量统统改成了long long,却只把输出改成了ld,依然只有60分!!
再后来终于意识到long long的输出,也要lld,这才正确= =太辛酸了。。

考虑思路如下:
1、红绿灯会循环,先让linshi%(r+g+y),得到的数对应是如果走完了循环,那么现在还剩多少时间,再与tm比较,根据当前的红黄绿,再逐一讨论
2、讨论的时候,盯着诸如r-(smpol-tm)这样来算就不容易出错(真的比较容易糊涂= =),因为是倒计时,拿当前灯完整的时间-smpol在此区间已走的时间,才是要走的时间

AC代码:

#include <stdio.h>
#include <string.h>

int main(){
	long long r,y,g;
	long long n;
	long long signal,tm;
	long long linshi = 0;
	long long sympol;   
	scanf("%lld %lld %lld",&r,&y,&g);
	scanf("%lld",&n);
	for(long long i = 0;i <n;i++){
		scanf("%lld %lld",&signal,&tm);
		if(signal == 0){    //直接走路 
			linshi = linshi + tm;
		}
		else if(signal == 1){    //红灯
			sympol = (linshi)%(r+y+g);
			if(sympol<tm){
				linshi = linshi + tm - sympol;   //仍然红灯,等待 	
			}
			else if(sympol>=tm && sympol<g+tm){
				linshi = linshi + 0;  //绿灯区间 
				
			}
			else if(sympol>=g+tm && sympol< g+tm+y){
				linshi = linshi + y-(sympol-g-tm)+r;   //黄灯区间 
				
			}
			else{
				linshi = linshi + r-(sympol-g-y-tm);    //红灯 
				
			}
		}
		else if(signal == 2){   //黄灯 
			sympol = (linshi)%(r+y+g);
			if(sympol<tm){
				linshi = linshi + tm - sympol +r;   
				
			}
			else if(sympol>=tm && sympol<r+tm){
				linshi = linshi + r-(sympol - tm);
				   
			}
			else if(sympol>=r+tm && sympol< r+tm+g){
				linshi = linshi + 0;  
				
			}
			else{
				linshi = linshi + y-(sympol-r-g-tm) + r;  
				
			}
		}
		else if(signal == 3){    //绿灯 
			sympol = (linshi)%(r+y+g);
			if(sympol<tm){
				linshi = linshi + 0; 
				
			}
			else if(sympol>=tm && sympol<y+tm){
				linshi = linshi + y-(sympol - tm) + r; 
				 
			}
			else if(sympol>=y+tm && sympol< r+tm+y){
				linshi = linshi + r-(sympol-y-tm); 
				
			}
			else{
				linshi = linshi + 0; 
				
			}
		}  
	}
	printf("%lld",linshi);
}

/*
30 3 30
8
0 10
1 5
0 11
2 2
0 6
0 3
3 10
0 3

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
201812-2小明放学的问题是关于小明利用“智慧光明”终端给出的信息,估算自己放学回家的时间。在这道题目中,小明已经规划好了回家的路线,并能够预测经过各个路段的时间。此外,小明还能够看到出发时刻路上经过的所有红绿灯的指示状态。根据题目的描述,我们可以推导出小明此次回家所需要的时间。 首先,题目给出了红绿灯的设置,包括红灯、黄灯和绿灯分别需要的时间。接下来,题目给出了小明经过的道路段数和路过的红绿灯数目。然后,题目给出了每个道路段和红绿灯的状态,包括经过的道路需要的时间和红绿灯的状态以及倒计时显示的数字。 根据题目的要求,我们需要不断地推演现在的时间下新经过的红绿灯状态。可以将红灯和黄灯放在一起,因为这两个状态下都得等待,然后将绿灯状态单独分开。这样就将问题简化为两个区间,即红黄和绿。通过计算每个区间所需的时间,就可以得到小明放学回家所用的总时间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [CCF 201812-2----小明放学----区间问题](https://blog.csdn.net/weixin_44778155/article/details/101158855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值