CCF 201803-2

这个题考虑到排序问题,有两种思路:

1.不排序,遇边界改变方向,暴力按时间走一秒比较与其他球的位置以确定下一秒的方向;

2.排序,遇边界改变方向只需要比较与相邻球的位置即可。

第一种方法代码入下:

#include <stdio.h>
#define N 101
int pos[N];
int der[N]; 
int main()
{   
    int n,l,t,i,j;
    scanf("%d%d%d",&n,&l,&t);
	for(i=0;i<n;i++){
	    scanf("%d",&pos[i]);
	    der[i]=1;
	    if(pos[i]==0||pos[i]==l)
	       der[i]*=-1;
	}
	while(t--){
		for(i=0;i<n;i++){
            pos[i]+=der[i];     //移动位置 
            if(pos[i]==0||pos[i]==l)//遇边界改变方向 
	          der[i]*=-1;
        }
        //两球相撞改变方向 
        for(i=0;i<n;i++)
            for(j=i+1;j<n;j++)
                if(pos[i]==pos[j]){
                	der[i]*=-1;
                	der[j]*=-1;
				}
	}
	printf("%d",pos[0]);
	for(i=1;i<n;i++)
	printf(" %d",pos[i]);
	return 0;
}

 

<think>好的,我现在需要帮助用户查找与C++相关的CCF CSP题解或练习。首先,用户提供的引用内容中有引用[1]到[3],其中引用[1]详细列出了多个CCF-CSP的试题编号、名称、题解分类和备注,大部分题解是用C++编写的。引用[2]和[3]则是具体的C++代码示例,可能来自某些题解。 首先,我应该确认用户的需求:他们想找到使用C++解决的CCF CSP编程题的相关资源,包括题解和练习题。根据引用[1],里面已经有很多C++的题解,所以我可以先整理这些信息。例如,试题编号如201312-1到最新的,每个都有对应的C++题解。这些可以作为主要的练习题目推荐给用户。 接下来,我需要检查引用[2]和[3]中的代码,看看它们对应哪些题目。例如,引用[2]的代码可能对应某个统计不同元素的题目,比如出现次数最多的数或者相邻数对?需要进一步分析。引用[3]的代码看起来涉及输入处理,可能涉及到坐标变换或累加,可能是无线网络或者任务调度之类的题目? 然后,我需要按照用户的要求,将回答结构化,分点说明,包括试题分类、示例代码解析、练习建议等。同时,必须使用中文,并确保所有数学表达式正确使用$...$或$$...$$格式。但根据用户提供的引用内容,可能数学公式较少,主要是编程题解,因此可能需要关注代码块和题目类型的描述。 另外,用户要求生成相关问题,我需要根据回答内容提出几个相关问题,比如如何准备CSP考试,或者具体题目的解题思路等。 需要注意的是,用户提供的引用内容中,引用[1]里的题解目录已经涵盖了多个年份的题目,这些都是C++实现的,可以作为主要推荐来源。而引用[2]和[3]的具体代码可能对应某些具体题目的解答,比如引用[2]中的代码可能是计算数组中不同连续元素的数量,类似“出现次数最多的数”或“相邻数对”题目。引用[3]中的代码可能涉及到坐标累加,可能属于窗口或无线网络类的题目。 最后,确保回答符合格式要求,使用中文,结构清晰,引用正确,并在末尾添加相关问题。同时,检查是否有需要使用的数学表达式,如果有的话,正确应用LaTeX格式。</think>根据提供的引用内容,以下是关于CCF-CSP认证考试中C++编程题解和练习的整理与分析: --- ### 一、CCF-CSP编程题分类与C++题解 引用[1]中列出的CCF-CSP试题按年份和编号分类,**大部分题解使用C++实现**。以下是部分典型题目及对应C++解法: 1. **基础算法题** - **201312-1 出现次数最多的数** 使用哈希表统计频率,C++可用`unordered_map`实现[^1]。 - **201403-1 相反数** 通过哈希表快速查找相反数是否存在。 2. **模拟与字符串处理** - **201312-2 ISBN号码** 字符串格式校验与计算校验码,需注意字符转换。 - **201803-1 跳一跳** 根据跳跃规则模拟得分过程。 3. **枚举与数学问题** - **201312-3 最大的矩形** 枚举所有可能的矩形高度组合,计算最大面积。 - **201312-4 有趣的数** 组合数学问题,需分析数位特性。 4. **动态规划与图论** - **201312-5 I’m stuck!** 需使用BFS/DFS遍历迷宫路径。 - **201403-4 无线网络** 最短路径或状态压缩的动态规划问题[^1]。 --- ### 二、C++代码示例解析 引用[2]和[3]提供了两个C++代码片段: 1. **引用[2]的代码** ```cpp // 统计相邻元素不同的次数 int main() { int n, a[1010] = {1010}; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; int ans = 0; for (int i = 1; i <= n; i++) { if (a[i] != a[i-1]) ans++; } cout << ans << endl; return 0; } ``` **对应题目**:可能是“相邻数对”或“折点计算”类问题,需统计序列中变化点的数量[^2]。 2. **引用[3]的代码** ```cpp // 坐标偏移量累加 int main() { int n, m, sum1 = 0, sum2 = 0; cin >> n >> m; while (n--) { int x, y; cin >> x >> y; sum1 += x; sum2 += y; } while (m--) { int X, Y; cin >> X >> Y; cout << X + sum1 << " " << Y + sum2 << endl; } return 0; } ``` **对应题目**:类似“窗口”或“无线网络”问题,需处理坐标偏移量的批量计算[^3]。 --- ### 三、练习建议 1. **优先刷题顺序** - 从简单题入手(如201312-1、201409-1)熟悉输入输出和基础语法。 - 逐步过渡到中等难度题目(如201312-3、201403-4)锻炼算法设计能力。 - 最后挑战复杂题(如201312-5、201403-5)提升综合编码能力。 2. **资源推荐** - 参考引用[1]中的题解目录,按分类针对性练习。 - 使用在线评测平台(如AcWing、Codeforces)模拟考试环境。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值