栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

滚动的小球问题c++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

滚动的小球问题c++

问题描述

在一个长为N的光滑平板上,有若干个光滑小球分布在平板的整数点上,比如0,1,2,....N,然后给定初始向左移动的小球工个,初始向右移动的小球R个,接下来给定向左移动的每个小球的初始位置和向右移动的每个小球的初始位置。保证小球的速度始终为每秒一个单位长度,当两个方向不同的小球相撞时,它们同时改变运动方向并继续运动(相撞瞬间完成,不消耗时间)。请求解最后一个小球从平板掉下来的时间。初始时刻t=0,即求解最后一个小球掉下去的t的值。(如果端点处小球一开始就向木板外滚动,那么它的掉落时刻为t=0 )

 

很多人刚开始看题的时候,就会感到十分困惑,因为所给的小球由于方向不同,有的之间会形成碰撞改变方向,那么又得重新改变方向进行运动,如何能够每秒都能进行位置的重新更新呢?我一开始也是这么想的。但是后来发现是我想多了。我们其实可以发现,小球其实运动的方向和时间仅仅和开始的方向和位置有关。这是为什么呢?

简单的举一个例子,如果有两个小球A、B 分别在0 2 位置,当二者碰撞时应该是在1位置,当碰撞发生之后,二者要改变方向继续运动。但是我们可以把它们的模型分别抽离出来,认为它们没有发生碰撞,而是继续朝着开始的方向进行运动。而事实上这两者确实是等价的关系。这样我们的问题就得到了简化:从必须找到时时刻刻更新每个小球位置,到最后一个小球掉落记录最长时间 直接可以转化为从开始时找到那个在平板上滚动时间最长的小球即可。

#include 

using namespace std;

int main( ){
int longth,LL,RR,temp,Lmax=0,Rmax=0;//设置木板长度longth,向左运动小球个数LL, 向右运动小球个数RR
//向左运动小球中运动距离最长的Lmax, 向右运动小球中运动距离最长的Rmax. 
int L[10010],R[10010];
scanf("%d %d %d",&longth,&LL,&RR);
for(int i=0;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号