/* CCF201803-2 碰撞的小球 */
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100;
struct Node{
int id; // 小球编号
int pos; // 位置
int step; // 运动方向,1表示向右,-1表示向左
} b[N];
bool cmp1(Node a,Node b)
{
return a.pos<b.pos;
}
bool cmp2(Node a,Node b)
{
return a.id<b.id;
}
int main()
{
int n,l,t,id=0;
cin>>n>>l>>t;
for(int i=0;i<n;++i)
{
b[i].id=id++;
cin>>b[i].pos;
b[i].step=1;
}
sort(b,b+n,cmp1);
for(int i=0;i<t;++i)
{
for(int j=0;j<n;++j)
{
//到达两端则回头
b[j].pos+=b[j].step;
if(b[j].pos==0||b[j].pos==l)
b[j].step=-b[j].step;
}
for(int j=1;j<n;j++)//判断相邻是否碰头
{
if(b[j].pos==b[j-1].pos)
b[j].step = -b[j].step, b[j - 1].step = -b[j - 1].step;
}
}
sort(b,b+n,cmp2);
for(int i=0;i<n;i++)
cout<<b[i].pos<<' ';
cout<<endl;
return 0;
}
201803-2 碰撞的小球
最新推荐文章于 2020-12-01 18:05:14 发布