【CSP试题回顾】201803-2-碰撞的小球

CSP-201803-2-碰撞的小球

解题思路

通过逐秒模拟每个小球的运动,并在小球到达线段端点或者与其他小球碰撞时改变其移动方向,来计算 t 秒后每个小球的位置。这个问题的关键点在于理解小球的运动和碰撞是独立并且可以预测的,所有的碰撞和方向变化都在整数时刻发生,这是由于所有的小球都开始在偶数位置上,线段长度也是偶数。

1. 初始化阶段

  • 读入小球个数 n、线段长度 L 和时间 t
  • 对每个小球,读入其初始位置并创建一个 MyBall 结构,包含小球的索引(index)、位置(position)和移动方向(direction),这里所有小球初始方向都设为向右(即 direction = 1)。

2. 模拟每一秒的小球运动

  • 对于给定的时间 t,程序模拟每一秒小球的运动。
  • 每一秒内,对于线段上的每一个小球:
    • 根据其方向更新位置:如果向右移动,则位置加一;如果向左移动,则位置减一。
    • 如果小球到达线段的两端(位置为 0 或 L),则改变其移动方向(即,向左变向右,向右变向左)。

3. 碰撞检测与处理

(1) 碰撞检测

  • 在每一秒钟的小球移动之后,需要检查是否有任何小球发生了碰撞。因为小球只能在直线上移动,所以碰撞只可能发生在两个小球相遇的情况下,即它们有相同的位置。
  • 为了检测这种情况,需要将所有小球按照它们当前的位置进行排序。这样,只需检查排序后的列表中相邻的小球是否占据相同的位置即可(因为不会有三个小球同时相撞)
  • 对于每对相邻的小球,检查它们是否在同一位置。如果是,那么这两个小球就发生了碰撞。

(2) 碰撞处理

  • 当检测到两个小球发生碰撞时,它们会交换速度,但在这个问题中,所有的小球速度大小相同,只是方向相反,因为不会有三个小球同时相撞,所以只检测相邻两个小球即可。
  • 处理的方式是改变每个发生碰撞的小球的移动方向。如果一个小球原本向右移动(direction = 1),在碰撞后它应该改变方向向左移动(direction = 0),反之亦然。

4. 输出结果

  • 模拟结束后(即过了 t 秒),对小球列表按照初始索引进行排序,以确保按照输入顺序输出它们的最终位置。输出每个小球最终的位置。

完整代码

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;struct MyBall
{int index;int position;bool direction; // 0-左 1-右
};
vector<MyBall>ballList;
int n, L, t, p;bool cmp1(MyBall& a, MyBall& b) { // 按位置排序return a.position < b.position;
}bool cmp2(MyBall& a, MyBall& b) { // 按索引排序return a.index < b.index;
}int main() {cin >> n >> L >> t;for (int i = 0; i < n; i++){cin >> p;ballList.push_back({ i,p,1 });}for (int i = 0; i < t; i++){for (auto& it : ballList) {if (it.direction) it.position++; // 向右else it.position--; // 向左if (it.position == L || it.position == 0) it.direction = !it.direction; // 碰撞检测}sort(ballList.begin(), ballList.end(), cmp1); // 排序是因为不会有三个小球同时相撞,所以只检测相邻俩小球即可for (int j = 0; j < ballList.size() - 1; j++) // 对撞检测{if (ballList[j].position == ballList[j + 1].position){ballList[j].direction = !ballList[j].direction;ballList[j + 1].direction = !ballList[j + 1].direction;}}}sort(ballList.begin(), ballList.end(), cmp2); // 恢复索引升序for (auto& it : ballList) {cout << it.position << " ";}return 0;
}

请添加图片描述

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

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

相关文章

Linux - 安装 nacos(详细教程)

目录 一、简介二、安装前准备三、下载与安装四、基本配置五、单机模式 一、简介 官网&#xff1a;https://nacos.io/ GitHub&#xff1a;https://github.com/alibaba/nacos Nacos 是阿里巴巴推出的一个新开源项目&#xff0c;它主要是一个更易于构建云原生应用的动态服务发现…

IT营销师行业市场分析报告

一、行业概述 随着数字化转型的浪潮席卷全球&#xff0c;IT营销师行业作为连接信息技术与市场营销的关键桥梁&#xff0c;近年来呈现出强劲的增长态势。IT营销师凭借其独特的技能组合&#xff0c;即深入理解IT产品和服务的技术特性以及精准把握市场需求&#xff0c;正在为企业…

DVWA-master 存储型xss

什么是存储型xss 存储型xss意味着可以与数据库产生交互的&#xff0c;可以直接存在数据库中 先将DVWA安全等级改为低 先随便写点东西上传 我们发现上传的内容会被显示&#xff0c;怎么显示的呢&#xff1f; 它先是上传到数据库中&#xff0c;然后通过数据库查询语句将内容回显 …

MySQL 篇-深入了解事务四大特性及原理

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 事务的概述 2.0 事务的特性 2.1 原子性 2.2 一致性 2.3 持久性 2.4 隔离性 2.4.1 脏读问题 2.4.2 不可重复读问题 2.4.3 幻读问题 3.0 事务的四个隔离级别 3.1…

WAAP全站防护

近年来&#xff0c;随着移动互联网的快速发展&#xff0c;诞生了APP、H5、小程序等多种应用形式&#xff0c;更多的企业核心业务、交易平台都越来越依赖这些新型应用程序。与此同时&#xff0c;越来越多的第三方API接口被调用&#xff0c;API业务带来的Web敞口风险和风险管控链…

H5自适应点状球动态背景个人主页源码

源码名称&#xff1a;自适应点状球动态背景个人主页源码 源码介绍&#xff1a;一款H5自适应点状球背景个人主页源码&#xff0c;带有个人联系方式、个人介绍、足迹、会的技能、相册、旗下站点、留言发邮箱功能【仅前端代码需自行配置或修改为其他功能】。可自行修改为你的个人…

LabVIEW电磁阀特性测控系统

LabVIEW电磁阀特性测控系统 电磁阀作为自动化工程中的重要组成部分&#xff0c;其性能直接影响系统的稳定性和可靠性。设计一种基于LabVIEW的电磁阀特性测控系统&#xff0c;通过高精度数据采集和智能化控制技术&#xff0c;实现电磁阀流阻、响应时间及脉冲特性的准确测量和分…

用机床测头为什么能提升加工中心精度?提高生产效率?

制造业的蓬勃发展为企业提出了更高的精度和效率要求。在现代制造业中&#xff0c;机床测头作为一种关键的检测装置&#xff0c;能够实时监控加工过程中的误差&#xff0c;及时调整&#xff0c;保证加工质量的稳定性&#xff0c;提高加工中心的精度&#xff0c;进而提升生产效率…

打开链接跳转的模式

摘要&#xff1a; 今天遇到一个需求&#xff1a;后台小程序的域名下打开微信客服链接的&#xff01;但是小程序的域名拒绝任何第三方域名&#xff0c;跨域了&#xff01;为了上线这微信客服的功能&#xff0c;打开新页签&#xff0c;脱离小程序的域名实现微信客服链接的跳转启动…

MISC:杂项

一、文件类型识别 背景&#xff1a;遇到文件没有后缀&#xff0c;不知道文件类型。 方法一、使用Linux中的file命令 原理&#xff1a;file命令会识别文件的文件头&#xff0c;通过文件头识别出文件类型。 命令格式&#xff1a;file <filename> 而文件头则可通过010edito…

Android 录屏操作

Android 录屏操作 本文主要介绍android中如何通过MediaRecorder实现录屏操作的. 1: 申请权限 <uses-permission android:name"android.permission.RECORD_AUDIO" /> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"…

计讯物联水库泄洪监测预警系统,保障水库安全度汛

近日&#xff0c;受台风外围环流影响&#xff0c;多地受到特大暴雨侵袭。因此水库泄洪是势在必行。泄洪作为水库防洪的重要方法之一&#xff0c;水库可通过其库容拦蓄洪水&#xff0c;在水库容量超出或下游需求的时候则开始实行泄洪&#xff0c;达到减免洪水灾害的目的&#xf…

画图实战-Python实现某产品全年销量数据多种样式可视化

画图实战-Python实现某产品全年销量数据多种样式可视化 学习心得Matplotlib说明什么是Matplotlib&#xff1f;Matplotlib特性Matplotlib安装 产品订单量-折线图某产品全年订单量数据数据提取和分析绘制折线图 产品订单&销售额-条形图某产品全年订单&销售额数据绘制条形…

TypeScript(六)条件类型,函数,装饰器

条件类型 TypeScript 中的条件类型是一种高级类型&#xff0c;它使我们根据不同的条件创建更复杂的类型。 TS中的条件类型就是在类型中添加条件分支&#xff0c;以支持更加灵活的泛型 条件类型允许我们根据某个类型的属性是否满足某个条件&#xff0c;来确定最终的类型。 type…

【智能算法】蜻蜓算法(DA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2016年&#xff0c;Mirjalili受到蜻蜓静态和动态集群行为启发&#xff0c;提出了蜻蜓算法(Dragonfly algorithm, DA)。 2.算法原理 2.1算法思想 蜻蜓集群有两种行为目的&#xff1a;狩猎&#xf…

高端新颖知识竞赛活动方案

设计一场高端新颖知识竞赛活动&#xff0c;需要组织者用心策划&#xff0c;精心准备。下面这场竞赛设计新颖&#xff0c;可供大家组织竞赛活动时参考 。本竞赛分为“万箭齐发”、“城旗易主”、“群雄逐鹿”、“追风逐电”&#xff0c;四个环节&#xff0c;所有环节必须在主持人…

【CesiumJS-5】绘制动态路线实现飞行航线、汽车轨迹、路径漫游等

实现效果 前言 Cesium中&#xff0c;动态路线绘制的核心是借助CZML格式&#xff0c;CZML是一种用来描述动态场景的JSON数组,可以用来描述点、线、多边形、体、模型及其他图元,同时定义它们是怎样随时间变化的&#xff1b; CZML主要做三件事&#xff1a; 1.添加模型信息 2.添加…

如何在Linux系统部署APITable容器并实现无公网IP远程管理本地数据

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c;是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码

1 蛇梯问题 Snake and Ladder Problem 给定一个蛇梯板,找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数。基本上,玩家可以完全控制掷骰子的结果,并希望找出到达最后一个单元格所需的最小掷骰次数。 如果玩家到达的牢房是梯子的底部,玩家…

金融防线升级:构筑数据安全的不可逾越之墙

近日&#xff0c;中国人民银行专栏《金融科技支持高质量发展》指出&#xff0c;应不断增强金融行业的网络安全和数据安全保障能力&#xff0c;坚持总体国家安全观&#xff0c;持续完善金融网络安全、数据安全制度体系&#xff0c;依法开展金融业关键信息基础设施安全保护工作&a…