当前位置: 首页 > article >正文

【CSP CCF记录】201812-2第15次认证 小明放学

题目

样例1输入

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

样例1输出

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

 

思路

参考:CCF小白刷题之路---201812-2 小明放学(C/C++ 100分)_小明放学测试数据-CSDN博客

我们使用一个for循环计算小明通过每段路/每个路灯所需时间。每轮我们需要完成以下几件事:

1. k=0,没有灯直接通过。

2. k=1,2,3,有交通灯,我们需要推测出小明到达时该灯是什么颜色,继而计算出小明在该灯处需要等多久。设小明还有tmp时间到达该灯。

  • 小明在到达该灯前,该灯可能已经经历了“红->绿->黄”几轮变化,使用%取余,使tmp限定在最新的周期。
  • 若tmp>=t(tmp>t),说明小明到达该灯前,该灯的颜色还会变换,因此需要不断tmp-t,相当于小明不断前进,交通灯颜色不断改变。
  • 若tmp<t(tmp<t),说明小明到达该灯前,该灯的颜色已经不会改变了。t-tmp为小明到达该灯时,该灯的持续时间,这时就可以根据灯的颜色分情况讨论。

其他注意点:假设n和r,y,g都是最大取值,这里预计用时就需要采用long long数据类型。

代码

注释还是很详细的。。。

#include<bits/stdc++.h>
using namespace std;
int r,y,g,n;
int main()
{
	cin>>r>>y>>g;
	cin>>n;
	long long ptime=0;//预计用时 
	for(int i=0;i<n;i++)
	{
		int k,t;
		cin>>k>>t;
		int light=k;//标记计算过程中的交通灯颜色 
		if(light==0)//直通 
		{
			ptime+=t;
			//cout<<"ptime:"<<ptime<<endl;
			continue;
		 } 
		long long tmp=ptime%(r+y+g);//在最新一轮交通灯变换中,小明还有tmp时间到达该路口 
		 //在t时间内交通灯颜色不会变化,tmp>=t说明小明到达路口前交通灯颜色还会变化。
		 //倒推小明到达路口时交通灯的颜色 
		while(tmp>=t)
	    {  
		    tmp=tmp-t; 
		    if(light==1)//当前是红灯 
			{
			 	t=g;
			 	light=3;//红灯->绿灯 
		   }
		   else if(light==2)//当前是黄灯 
			{
				t=r;
			 	light=1;//黄灯->红灯 
			}
			else if(light==3)//当前是绿灯 
			{
			    t=y;
			    light=2;//绿灯->黄灯 
			}

		 }
		 //这时tmp<t,说明小明到达路口前交通灯颜色不会再变了,可以讨论小明在路口要等多久 
		 t=t-tmp;
		 if(light==1)//红灯 
		 {
		 	ptime+=t;
		 	//cout<<"ptime:"<<ptime<<endl;
		 }
		 else if(light==2)//黄灯 
		 {
		 	ptime+=(t+r);//等完黄灯后还要再等红灯 
		 	//cout<<"ptime:"<<ptime<<endl;
		 }
		 //绿灯无需等待直接通过 
	}
	cout<<ptime;
	return 0;
}

运行结果


http://www.kler.cn/a/408383.html

相关文章:

  • 【力扣算法题】双指针-战场上的矛与盾的组合(移动零)(快乐数)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-05
  • Elasticsearch 6.8 分析器
  • 003 STM32基础、架构以及资料介绍——常识
  • 蓝桥杯c++算法学习【5】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)
  • CANDENCE: 绘制好的封装元件 刷新(Refresh) 和 替换 (Replace)焊盘
  • 数学建模学习(138):基于 Python 的 AdaBoost 分类模型
  • 【贪心算法-第三弹——Leetcode-179.最大数】
  • Python 虚拟环境使用指南
  • enumerate()
  • 【C++】类(五):构造函数再探
  • 【JavaEE初阶 — 网络原理】初识网络原理
  • 【教学类-18-05】20241118正方形手工纸(蒙德里安-风格派-红黄蓝黑白)
  • kafka进阶_3.消费消息
  • STM32F10x 定时器
  • Linux之SELinux与防火墙
  • Linux无sudo权限将zsh作为默认shell
  • BOM的详细讲解
  • 【卷积神经网络;深度学习;滑坡检测;遥感|论文解读1】滑坡检测特征增强框架——AMU-Net
  • 什么是 WPF 中的依赖属性?有什么作用?
  • 什么是Axios,有什么特点
  • 单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
  • windows vscode C++ 简明教程
  • oneplus6线刷、trwp、magisk(apatch)、LSPosed、Shamiko、Hide My Applist
  • 【计算机网络】计算机网络概述
  • 40分钟学 Go 语言高并发实战:高性能缓存组件开发