比较良心的膜你题。
一些定义:
$a$:所有小球的位置。
从小到大更新小球的位置,所以要先对 $a$ 排序,然后更新 $t$ 次,依次更新每个小球。
碰撞的情况很好判断,因为已经维护的 $a$ 的单调性,可能和当前第 $i$ 个球碰撞的一定只有 $a_{i+1}$。
// author: TMJYH09
// created on: 2022/05/25 21:01:07
#include <bits/stdc++.h>
using namespace std;
int L,n,t;
struct _{
int pos,dir;
int id;
}a[105];
int main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
cin>>n>>L>>t;
for(int i=1;i<=n;i++){
cin>>a[i].pos;a[i].dir=1;
a[i].id=i;
}
sort(a+1,a+n+1,[](const _&x,const _&y){return x.pos<y.pos;});
while(t--){
for(int i=1;i<=n;i++){
if(a[i].pos==L)a[i].dir=-1;
if(a[i].pos==0)a[i].dir=1;
if(a[i].pos==a[i+1].pos)a[i].dir=-a[i].dir,a[i+1].dir=-a[i+1].dir;
a[i].pos+=a[i].dir;
}
}
sort(a+1,a+n+1,[](const _&x,const _&y){return x.id<y.id;});
for(int i=1;i<=n;i++)cout<<a[i].pos<<' ';
return 0;
}