CCF-CSP 201812-2 小明放学

文章提供了解决红绿灯变化模拟问题的两种C++代码实现。第一种方法是直接根据红绿黄灯的循环变化模拟时间,第二种是通过坐标轴模拟时间变化。代码主要用于计算在给定的红绿灯周期和多个事件下,总等待时间。目前,提供的代码只能得到60分的结果,可能存在的问题是未完全处理所有边界情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 需要注意的是该题需要用到上一题的条件,即灯光的变化是按照:红绿黄循环变化的

第一想法是模拟该过程即可,即根据条件得到到达某一个红绿灯时经过的时间,然后再根据该时间去循环该红绿灯的变化,得到当前时间的灯光状态,再进行计算叠加即可

#include<iostream>

using namespace std;

int r,y,g,n;
long long ans;

void fun(int t,int sub,int cur){
	t-=sub;
	do{
		if(cur==1){//红 
			cur=3;//红变绿 
		}else if(cur==2){//黄 
			cur=1;//黄变红 
		}else if(cur==3){//绿 
			cur=2;//绿变黄 
		}	
		if(cur==1){
			t+=r;
		}else if(cur==2){
			t+=(y);
		}else if(cur==3){
			t+=g;
		}
	}while(t<0);
	if(cur==1){
		ans+=t;
	}else if(cur==2){
		ans+=(r+t);
	}		
}

int main(){
	cin>>r>>y>>g;
	cin>>n;
	for(int i=0;i<n;i++){
		int k,t;
		cin>>k>>t;
		if(k==0){
			ans+=t;
		}else{
			if(t-ans>0){//不会影响当前红绿灯状态 
				if(k==1){
					ans+=t;
				}else if(k==2){
					ans+=(r+t);
				}		
			}else{
				fun(t,ans,k);
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

该代码只能通过60分,目前还未查询出问题所在

 思路2(区间模拟借鉴自

我们使用一个坐标轴来模拟时间的变化,由出发时刻得到的每一个t,我们都可以推算出在坐标轴上的位置,然后再进行时间的变化(即得到当前时刻的时间坐标),再判断还需要多少时间才会变成绿灯即可

k = 0,t表示行驶路程的时间,直接累加
k = 1;t表示人在起点时,该红灯剩余的时间
k = 2;t表示人在起点时,该黄灯剩余的时间
k = 3;t表示人在起点时,该绿灯剩余的时间
可以画一个坐标图模拟过时间cnt后灯的颜色,从而计算还需等待多久

在这里插入图片描述

 

#include<iostream>

using namespace std;

int r,y,g,n;
long long ans;

void fun(int t,int sub,int cur){
	t-=sub;
	do{
		if(cur==1){//红 
			cur=3;//红变绿 
		}else if(cur==2){//黄 
			cur=1;//黄变红 
		}else if(cur==3){//绿 
			cur=2;//绿变黄 
		}	
		if(cur==1){
			t+=r;
		}else if(cur==2){
			t+=(y);
		}else if(cur==3){
			t+=g;
		}
	}while(t<0);
	if(cur==1){
		ans+=t;
	}else if(cur==2){
		ans+=(r+t);
	}		
}

int main(){
	cin>>r>>y>>g;
	cin>>n;
	for(int i=0;i<n;i++){
		int k,t;
		cin>>k>>t;
		if(k==0){
			ans+=t;
		}else{
			if(t-ans>0){//不会影响当前红绿灯状态 
				if(k==1){
					ans+=t;
				}else if(k==2){
					ans+=(r+t);
				}		
			}else{
				fun(t,ans,k);
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

<think>好的,我现在需要回答用户关于CCF-CSP比赛规则或赛制的问题。用户已经提供了四个引用来源,我需要仔细分析这些信息,并整理出一个结构清晰的回答。 首先,我要确认用户的问题核心是CCF-CSP的赛制规则,可能包括认证级别、考试内容、评分规则、认证时间和形式等方面。接下来,我需要从提供的引用中找到相关信息。 引用[1]提到CCF CSP认证是计算机软件能力认证,属于职业资格认证。引用[2]指出CSP-J/S分两个级别,不设年龄限制,面向非专业级。引用[3]补充了CSP-JS分为入门组和提高组,涉及算法和编程,并且提到了GESP一级认证的情况。引用[4]则强调了需要扎实的基础知识和实践经验,无论是个人还是团队参赛。 接下来,我需要将这些信息整合成几个关键点。比如,认证级别分为CSP-J和CSP-S,考试内容可能包括算法和编程题,评分规则可能涉及题目得分和等级评定,认证时间可能每年举办,形式为机试。 需要注意的是,用户提供的引用中没有详细的评分细则,比如每题分值或通过标准,所以可能需要说明具体评分规则需参考当年公告。同时,引用[2]提到了第二轮认证,可能说明赛制分为初赛和复赛,但需要确认是否适用于所有级别的认证。 另外,引用[3]提到了GESP Python认证一级,这可能与CSP不同,但用户问题集中在CSP上,所以可以暂时忽略这部分,除非有直接关联。 整理时还要确保回答结构清晰,分点列出,并自然地添加引用标识。最后,生成的相关问题需要与CCF-CSP的赛制相关,比如认证难度、备考方法、与其他竞赛的区别等。 现在需要检查是否有遗漏的信息或可能的错误。例如,引用[2]提到CSP-J/S2020第二轮认证,可能意味着CSP-J/S分为两轮,但引用[4]没有明确说明,因此需要谨慎表述,指出通常分为两轮,但具体以官方公告为准。 总结下来,回答应包含以下几个部分:认证级别、考试内容、评分规则、认证时间和形式,以及注意事项。每个部分引用对应的来源,并在末尾生成相关问题。</think>### CCF CSP比赛规则与赛制详解 #### 1. **认证级别与分组** CCF CSP认证分为**非专业级别(CSP-J/S)**和**专业级别**。其中: - **CSP-J(入门组)**:面向算法和编程基础较弱的初学者。 - **CSP-S(提高组)**:面向有一定编程和算法能力的学习者[^3]。 - 专业级别认证(如GESP)则针对更高级别的编程能力评估,例如Python一级认证等[^3]。 #### 2. **考试内容** - **题型**:以算法和编程题为主,涵盖数据结构、动态规划、图论等计算机科学核心内容。 - **形式**:上机编程,需在限定时间内完成题目并提交代码[^4]。 - **难度分级**:CSP-J题目相对基础,CSP-S题目复杂度更高,涉及更深入的算法设计。 #### 3. **评分规则** - **得分机制**:每题按测试用例通过比例得分,例如某题有10个测试点,通过6个则得60%分数[^2]。 - **等级评定**:根据总分划分等级(如A/B/C),具体分数线由CCF官方在考试后公布[^2][^4]。 #### 4. **认证时间与形式** - **频率**:每年举办多轮认证,例如CSP-J/S通常分为初赛和复赛两轮。 - **初赛**:多为笔试或在线理论考试,筛选进入复赛的选手。 - **复赛**:上机编程实践,决定最终成绩[^4]。 #### 5. **参赛资格与注意事项** - **资格**:无年龄、职业限制,学生和在职人员均可报名。 - **团队参赛**:部分赛事允许团队协作,但需遵守具体规则[^4]。 - **认证用途**:CSP成绩可作为高校录取、企业招聘的参考依据[^1]。 #### 注意事项 - 具体赛制可能因年份调整,需以**CCF官方公告**为准。 - 编程语言通常支持C++、Java、Python等,需提前确认环境要求。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZZWWWFFF_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值