CSP-CCF★★★201812-2小明放学★★★

news2024/11/24 23:20:50

目录

一、问题描述

二、解答

(1)注意:

(2)80分版:

(3)100分版:

三、总结


一、问题描述

二、解答

(1)注意:

题目的n小于等于10的5次方,而时间t不超过10的6次方,那么回家的时间最大大概为n*t,即10的11次方,显然超过了int的范围(10的9次方)。所以在这里涉及到计算总时间的都要使用long long型。

(2)80分版:

思路:大情况:k==0和k!=0;

在k!=0中又分三种小情况:t>time;t==time;t<time;

在t<time中,通过累加直到count大于或等于time,利用flag作为下一个应该累加的数的标志,利用color来记录最后一个加上的灯的颜色。

分析:可能是写的太复杂了,显示运行超时

代码:

#include<iostream>
using namespace std;
int main()
{
	int r, y, g;
	cin >> r >> y >> g;
	int n;
	cin >> n;
	//红绿黄
	int k, t;
	long long time = 0;
	//k=1、2、3 时,分别表示出发时刻,
	//此处的红绿灯状态是红灯、黄灯、绿灯,且倒计时显示牌上显示的数字是 t
	int flag = 0;
	long long count = 0;
	for (int i = 1; i <= n; i++)
	{
		cin >> k >> t;
		count = t;
		if (k == 0) { time += t; }
		else if (k != 0)
		{
			//int flag = k+1;//下一盏灯亮的标志
			int color = k;
			if (count > time) {
				if(color==2)//黄色
				{
					time += (count - time + r);
				}
				if(color==1)//红色
				{
					time += (count - time);
				}//绿色不需要等待

			}
			else if (count == time)
			{
				if (color == 3)//绿色
				{
					time += (r + y);
				}
				if(color==2)//黄色
				{
					time += r;
				}
			}
			else if(count<time){
				if (color == 1)//红灯
				{
					flag = 3;//表示下一个亮的是绿灯,累加的下一个标志
				}
				else if (color == 2) { flag = 1; }
				else if (color == 3) { flag = 2; }
			while (count <time)//开始累加,按照红、绿、黄的顺序
			{
				if (flag == 1)//红灯
				{
					
					flag = 3;
					color = 1;
					count += r;
				}
				else if (flag == 2)//黄灯
				{
					
					flag = 1;
					color = 2;
					count += y;
				}
				else if (flag == 3)//绿灯
				{
					
					flag = 2;
					color = 3;
					count += g;
				}
			}
			if(count==time){
			if (color == 2)//黄
			{
				time += r;
			}
			else if (color == 3)//绿
			{
				time += (r + y);
			}
			}
			else if (count > time)
			{
				if(color==1)//红
				{
					time += (count - time);
				}
				else if (color == 2)//黄
				{
					time += (count - time) + r;
				}
			}
			}
		}

	}
	cout << time;
	return 0;
}

(3)100分版:

重点:如图

代码:

#include<iostream>
using namespace std;
int main()
{
	int r, y, g;
	cin >> r >> y >> g;
	int n;
	cin >> n;
	int k, t;
	long long time = 0;//注意这里的时间要用long long类型
	long long count = 0;
    //亮灯顺序:红绿黄
	//k=1、2、3 时,分别表示出发时刻,
	//此处的红绿灯状态是红灯、黄灯、绿灯,且倒计时显示牌上显示的数字是 t
	for (int i = 1; i <= n; i++)
	{
		cin >> k >> t;
		if (k == 0) { time += t; }
		else {
			if (k == 1) {
				if (time < t) { time += (t - time); }
				else if (time == t) { time += 0; }
				else if(time>t){//绿黄红
					count = (time - t) % (r + y + g);
					if (count >= 0 && count < g)
					{
					}
					else if (count >= g && count < (g + y))
					{
						time += (g + y - count + r);
					}
					else if (count >= (g + y) && count < (g + y + r))
					{
						time += (g + y + r - count);
					}
				}
			}
			if (k == 2) {//红绿黄
				if (time < t) { time += (t - time+r); }
				else if (time == t) { time += r; }
				else if (time > t){
					count = (time - t) % (r + y + g);
				if (count >= 0 && count < r)
				{
					time += (r - count);
				}
				else if (count >= r && count < (r + g))
				{
				}
				else if (count >= (r + g) && count < (r + g + y))
				{
					time += (r + g + y - count + r);
				}}
				
			}
			if (k == 3) {//黄红绿
				if (time < t) { time += 0; }
				else if (time == t) { time += r+y; }
				else if (time > t) {
					count = (time - t) % (r + y + g);
					if (count >= 0 && count < y)
					{
						time += (y - count + r);
					}
					else if (count >= y && count < (r + y))
					{
						time += (r + y - count);
					}
					else if (count >= (r + y) && count < (r + g + y))
					{
					}
				}
			}
		}
	}
	cout << time;
	return 0;
}

三、总结

(1)如果数的规模很大时,估算一下,看有没有超过10的9次方,超过的话就要用long long。

(2)题目中有循环往复的情况,可以考虑取余、用周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9月10(信息差)

&#x1f30d;华为最便宜小折叠&#xff01;华为nova Flip今晚发布&#xff1a;搭载麒麟8000芯片 从曝光的跑分信息来看&#xff0c;nova Flip将搭载麒麟8000处理器&#xff0c;也就是nova 12 Pro/Ultra的同款&#xff0c;采用8核心的134组合&#xff0c;大核是1颗2.4GHz的Cort…

怎么画实体关系图E-R?用这款在线绘图工具简单又好用!

ER图(Entity-Relationship Diagram&#xff0c;即实体-关系图)是一种用于数据库设计的图形化工具&#xff0c;用于描述现实世界的概念模型。它由Peter Chen于1976年首次提出&#xff0c;现已成为数据库建模和系统分析设计中最常用的工具之一。 ER图通过图形化的方式&#xff0…

Mamba模型学习笔记

笔记来源&#xff1a;bilibili Transformer 的死穴 Transformer 结构的核心是自注意力机制层&#xff0c;无论是 encoder 还是 decoder&#xff0c;序列数据都先经过位置编码后喂给这个模块。 但是自注意力机制的计算范围仅限于窗口内&#xff0c;而无法直接处理窗口外的元素…

支持iPhone 16新品预售,饿了么同步上线专人配送等特色服务

9月10日凌晨&#xff0c;2024年 Apple 秋季新品发布会上正式揭晓iPhone 16新机。9月10日一早&#xff0c;饿了么同步宣布&#xff1a;今年将携手近4000家Apple 授权专营店&#xff0c;支持iPhone 16新品预售及现货的同步开售。新机现货首发当日&#xff0c;饿了么消费者最快半小…

Mysql | 知识 | 事务隔离级别

转账案例缘起 我的钱包&#xff0c;共有 100 元。 今天我心情好&#xff0c;我决定给你的转账99元&#xff0c;最后的结果肯定是我的余额变为 1元&#xff0c;你的余额多了99元。 转账这一动作在程序里会涉及到一系列的操作&#xff0c;假设我向你转账 99元 的过程是有下面这…

哪些原因导致ERP成功率这么低?

哪些原因导致ERP成功率这么低&#xff1f; 有一句名言是“幸福的家庭都是相似的&#xff0c;不幸的家庭却各有各的不幸。”&#xff0c;这句名言应用到企业数字化的实施落地中也是适用的&#xff0c;数字化成功实施的企业也都是相似的&#xff0c;数字化实施失败的企业却有各种…

安卓玩机工具-----适合安卓机型的“搞机工具箱” 功能齐全 玩机推荐

搞机工具箱最新版是一款相当出色的电脑端手机工具箱软件&#xff0c;搞机工具箱正式版功能强劲&#xff0c;可以帮助用户不需要root就能够直接对手机进行调节&#xff0c;方便对手机进行更加全面的掌控&#xff0c;搞机工具箱便捷好用&#xff0c;只需要根据文字提示及自己的需…

开源的 Windows 12 网页体验版!精美的 UI 设计、丰富流畅的动画

大家周二好呀&#xff01;博主今天给小伙伴们分享一款炫酷的 Windows 12 体验版&#xff0c;网页效果拉满&#xff0c;非常值得我们去尝试&#xff01; 如果你对未来的Windows操作系统充满期待&#xff0c;那么这款开源的Windows 12 网页体验版绝对不容错过&#xff01;这不仅…

如何编辑pdf文件?金舟PDF编辑器解决PDF编辑、转换问题!

如何编辑pdf文件&#xff1f;pdf是电脑上便携的文档格式之一&#xff0c;不管是阅读&#xff0c;还是打印&#xff0c;都不会出现排版错乱的问题&#xff0c;并且在任意系统上都能“正常”展示&#xff0c;不受影响。这也是pdf文件运用较为广泛的原因之一。 不少用户在接触到pd…

【数据结构与算法 | 灵神题单 | 前后指针(链表)篇】力扣19, 61,1721

1. 力扣19&#xff1a;删除链表的倒数第N个节点 1.1 题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; …

cache miss问题C++示例

原题是&#xff1a; const int LEN 64*1024*1024; int *arr new int[LEN]; for (int i 0; i < LEN; i 2) arr[i] * i; // 循环1 for (int i 0; i < LEN; i 8) arr[i] * i; // 循环2第二个循环比第一个循环少了四倍的计算量&#xff0c;理论上应该要快4倍&#xff…

深度解析RAG:你必须要了解的RAG优化方法

RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合检索和生成能力的技术框架&#xff0c;旨在通过从外部知识库中检索相关信息来增强生成模型的输出。其基本思想是利用大型语言模型&#xff08;LLM&#xff09;的生成能力&#xff0c;同时通过检索机制获取…

OpenStack × OceanBase: 打造高可用可扩展的基础设施平台

OceanBase 社区资深总监封仲淹在9月3日参加 OpenInfra 亚洲峰会中&#xff0c;分享了OceanBase与OpenStack的联合解决方案。本文将介绍这一联合方案的技术亮点及其为用户带来的独特价值。 OpenStack长期以来一直是云计算领域的先行者&#xff0c;通过提供强大的开源平台&#x…

西门子博途零基础学PLC必会的100个指令

#西门子##PLC##自动化##工业自动化##编程##电工##西门子PLC##工业##制造业##数字化##电气##工程师# 工控人加入PLC工业自动化精英社群 工控人加入PLC工业自动化精英社群

MATLAB求解0-1线性规划问题的详细分析

引言 0-1线性规划是整数规划中的一种特殊形式&#xff0c;它广泛应用于资源分配、工厂选址、投资组合优化、物流运输等多个领域。0-1线性规划的特点是&#xff0c;决策变量只能取0或1的离散值&#xff0c;通常用于描述“是-否”决策问题。随着计算机技术的发展&#xff0c;数学…

红日靶机(一) 笔记

红日靶机(一)笔记 概述 域渗透靶机&#xff0c;可以练习对域渗透的一些知识&#xff0c;主要还是要熟悉 powershell 语法&#xff0c;powershell 往往比 cmd 的命令行更加强大&#xff0c;而很多渗透开源的脚本都是 powershell 的。例如 NiShang&#xff0c;PowerView 等等。…

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示&#xff0c;也让人摸不着头脑。只能是记下来备用吧。

Ai+若依(集成easyexcel实现excel表格增强)

EasyExcel 介绍 官方地址:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一…

Web3 项目安全手册

现如今针对 Web3 项目的攻击手法层出不穷&#xff0c;且项目之间的交互也越发复杂&#xff0c;在各个项目之间的交互经常会引入新的安全问题&#xff0c;而大部分 Web3 项目研发团队普遍缺少的一线的安全攻防经验&#xff0c;并且在进行 Web3 项目研发的时候&#xff0c;重点关…

JavaWeb中处理 Web 请求的方式总结

文章目录 JavaWeb中处理 Web 请求的方式总结1. 原始的 Servlet 方式1.1. 环境搭建**创建 Maven 或 Gradle 项目**&#xff1a;**添加 Servlet 依赖**&#xff1a;**创建 Servlet 类**&#xff1a;**配置项目**&#xff1a;**配置 Tomcat**&#xff1a; 1.2. 路由机制1.3. 示例代…