CCF201803-2 碰撞的小球
试题编号: | 201803-2 |
试题名称: | 碰撞的小球 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述:
数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。
当小球到达线段的端点(左端点或右端点)的时候,会立即向相反的方向移动,速度大小仍然为原来大小。
当两个小球撞到一起的时候,两个小球会分别向与自己原来移动的方向相反的方向,以原来的速度大小继续移动。
现在,告诉你线段的长度L,小球数量n,以及n个小球的初始位置,请你计算t秒之后,各个小球的位置。
提示
因为所有小球的初始位置都为偶数,而且线段的长度为偶数,可以证明,不会有三个小球同时相撞,小球到达线段端点以及小球之间的碰撞时刻均为整数。
同时也可以证明两个小球发生碰撞的位置一定是整数(但不一定是偶数)。
输入格式
输入的第一行包含三个整数n, L, t,用空格分隔,分别表示小球的个数、线段长度和你需要计算t秒之后小球的位置。
第二行包含n个整数a1, a2, …, an,用空格分隔,表示初始时刻n个小球的位置。
输出格式
输出一行包含n个整数,用空格分隔,第i个整数代表初始时刻位于ai的小球,在t秒之后的位置。
样例输入
3 10 5
4 6 8
样例输出
7 9 9
样例说明
初始时,三个小球的位置分别为4, 6, 8。
一秒后,三个小球的位置分别为5, 7, 9。
两秒后,第三个小球碰到墙壁,速度反向,三个小球位置分别为6, 8, 10。
三秒后,第二个小球与第三个小球在位置9发生碰撞,速度反向(注意碰撞位置不一定为偶数),三个小球位置分别为7, 9, 9。
四秒后,第一个小球与第二个小球在位置8发生碰撞,速度反向,第三个小球碰到墙壁,速度反向,三个小球位置分别为8, 8, 10。
五秒后,三个小球的位置分别为7, 9, 9。
样例输入
10 22 30
14 12 16 6 10 2 8 20 18 4
样例输出
6 6 8 2 4 0 4 12 10 2
数据规模和约定
对于所有评测用例,1 ≤ n ≤ 100,1 ≤ t ≤ 100,2 ≤ L ≤ 1000,0 < ai < L。L为偶数。
保证所有小球的初始位置互不相同且均为偶数。
解题思路:
这是一个模拟题,按照时间序列进行模拟,模拟小球的运动过程。好在每个时间单位小球只移动一个位置,处理起来就要简单一些。模拟题关键在于采用什么样的数据表示,这里给出2种解法。
使用数组pos[i]存储第i个球的初始位置;使用数组step[i]存储第i个球现在的运动方向,step[i]=1表示向右走,step[i]=-1表示往左走,用加法运算就可以实现小球的移动。
模拟过程是按照时间序列,先计算小球的下一个位置,如果该位置为两端则改变运动方向。再根据小球的新位置看看有没有2个小球碰头,有的话分别改变运动方向。只是简单地判断2个小球是否碰头需要用暴力法算一下。
解题代码:
#include <iostream>
using namespace std;
const int L = 1000;
int pos[L + 1], step[L + 1];int main()
{int n, l, t;cin >> n >> l >> t;for(int i = 0; i < n; i++) {cin >> pos[i];// 开始往右走,到达两端则回头step[i] = 1;if(pos[i] == l || pos[i] == 0)step[i] = -step[i];}for(int i = 0; i < t; i++) {// 走一步for(int j = 0; j < n; j++) {pos[j] += step[j];// 到达两端则回头if(pos[j] == l || pos[j] == 0)step[j] = -step[j];}// 判断是否碰头,碰头则掉头(要避免重复比较)for(int j = 0; j < n; j++)for(int k = j + 1; k < n; k++)if(pos[k] == pos[j])step[k] = -step[k], step[j] = -step[j];}for(int i = 0; i < n; i++)cout << pos[i] << " ";cout << endl;return 0;
}
CCF201803-2 碰撞的小球相关推荐
- 碰撞的小球 ccf (模拟)
问题描述 试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐 ...
- 【CCF】201803-2 碰撞的小球
试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体 ...
- CCF2018-3-2 碰撞的小球
试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有 ...
- CCF201803-2 碰撞的小球(100分)【模拟】
试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有 ...
- CCF 201803 跳一跳 碰撞的小球 url映射 棋局评估
试题编号: 201803-1 试题名称: 跳一跳 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱. 简化后的跳一跳规则如下: ...
- 2018-3 碰撞的小球(C++)
考察: 这题主要考察了struct的使用,以及边界的判断 思路: 我一开始想用bool isVisit[]来简化最后的碰撞判断,但总是错,经过调试发现这就是问题,虽然没明白,如果哪位朋友知道为什么错了 ...
- CCF计算机软件能力认证试题练习:201803-2 碰撞的小球
碰撞的小球 来源:CCF 标签: 参考资料: 相似题目: 题目 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上, ...
- CCF CSP 碰撞的小球 C++
碰撞的小球 代码比较长是因为看错题意,题目要求最后按序号输出位置,因此既要存序号,也要存位置.先将小球按照初始位置排序,定义另一个数组mov来记录小球移动的距离,每过一个单位时间判断是否发生碰撞,并修 ...
- 201803-2 碰撞的小球(C++)
试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有 ...
最新文章
- 三分钟黑了阿里?马云下死命令留他?吴翰清辟谣:我没黑过阿里
- 新版GNS3-安装及配置教程
- 微软反垄断案新突破 Win10系统或需剥离可信计算
- 前端学习(3049):vue+element今日头条管理-请求获取数据
- durpal是否支持php7,drupal7 的安装方法
- 听音扒谱app_掌握这些,你也可以轻松扒谱(下)
- Rbf神经网络使用Tensorflow实现
- 怎么重置计算机网络设置密码,怎么重新设置wifi密码_如何重新设置无线密码?-192路由网...
- 如何使用Topcoder
- 我是一个将近30岁的女程序员
- java filter 重定向_在Filter的doFilter中进行重定向 出现异常
- Vue 获取当前地理位置信息
- 海康智能分析服务器设置,【胖猴小玩闹】智能门锁与网关: 海康萤石智能门锁的网关分析(三)...
- matlab中图像显示函数
- Java:Java静态多态性与动态多态性
- 在IT行业中,程序员的学历重要吗?
- 达人评测 酷睿i5 12450h和锐龙r7 5800h选哪个好 i512450h和r75800h对比
- c#通过onvif协议实现视频查看,截图录像ptz控制
- 10086登录JS加解密充值讲解
- PCB拼板,那几条很讲究的规则~