不可能会有三个小球碰撞。
#include <bits/stdc++.h>
using namespace std;
const int INF = 999999999;
struct node{
int x;
int b;
int pos;
};
node a[1005];
bool cmp1(node a,node b){
return a.x < b.x;
}
bool cmp2(node a,node b){
return a.pos < b.pos;
}
int main(){
ios::sync_with_stdio(0);
int n,l,t;cin >> n >> l >> t;
for(int i = 1;i <= n;i++){
cin >> a[i].x;
a[i].b = 1;
a[i].pos = i;
}
sort(a+1,a+1+n,cmp1);
for(int i = 1;i <= t;i++){
for(int j = 1;j <= n;j++){
a[j].x += a[j].b;
}
if(a[n].x > l){
a[n].x = l - 1;
a[n].b = -a[n].b;
}
if(a[1].x < 0){
a[1].x = 1;
a[1].b = -a[1].b;
}
for(int j = 1;j < n;j++){
if(a[j].x == a[j+1].x){
a[j].b = -a[j].b;
a[j+1].b = -a[j+1].b;
}
}
}
sort(a+1,a+1+n,cmp2);
for(int i = 1;i <= n;i++){
cout << a[i].x;
if(i != n) cout << " ";
}
cout << endl;
return 0;
}