#include <bits/stdc++.h>
using namespace std;
struct ball{
int pos;
int dir;//-1 is right 1 is left
};
ball ball[10000];
int main()
{
int n,L,t;
cin>>n>>L>>t;
for(int i=1;i<=n;i++){
cin>>ball[i].pos;
ball[i].dir=-1;
}
for(int i=1;i<=t;i++){
for(int j=1;j<=n;j++)
{
//正常运动
if(ball[j].pos<L&&ball[j].dir==-1){
ball[j].pos++;
}
if(ball[j].pos>0&&ball[j].dir==1){
ball[j].pos--;
}
//碰边则反向
if(ball[j].pos==L&&ball[j].dir==-1){
ball[j].dir=1;
}
if(ball[j].pos==0&&ball[j].dir==1){
ball[j].dir=-1;
}
//小球位置相同则碰到 碰到就反向
for(int k=1;k<=n;k++){
if(k!=j&&ball[k].pos==ball[j].pos){
ball[k].dir*=-1;
ball[j].dir*=-1;
}
}
}
}
for(int i=1;i<=n;i++){
cout<<ball[i].pos<<' ';
}
}
CCF CSP试题编号: 201803-2试题名称: 碰撞的小球
最新推荐文章于 2024-07-25 21:11:40 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)