试题编号: 201803-2
试题名称: 碰撞的小球
时间限制: 1.0s
内存限制: 256.0MB
#include <iostream>
using namespace std;
struct Ball{
int set;
bool flag=true;
};
struct llu{
int ball1=-1;
int ball2=-1;
};
int main(int argc, char** argv) {
int n,l,t1;
cin>>n>>l>>t1;
Ball ball[n];
llu lu[l];
for(int i=0;i<n;i++){
cin>>ball[i].set;
lu[ball[i].set].ball1=i;
}
for(int t=0;t<t1;t++){
for(int i=0;i<n;i++){
if(ball[i].set==0){//端点保护
ball[i].flag=true;
}else if(ball[i].set==l){
ball[i].flag=false;
}
if(lu[ball[i].set].ball1==ball[i].set){
lu[ball[i].set].ball1==-1;
}else{
lu[ball[i].set].ball2==-1;
}
if(ball[i].flag){//移位
ball[i].set++;
}else{
ball[i].set--;
}
}
for(int k=0;k<n;k++){
if(lu[ball[k].set].ball1==-1){
lu[ball[k].set].ball1=k;
}else{
lu[ball[k].set].ball2=k;
}
}
for(int j=0;j<l;j++){
if((lu[j].ball1!=-1)&&(lu[j].ball2!=-1)){
ball[lu[j].ball1].flag=!ball[lu[j].ball1].flag;
ball[lu[j].ball2].flag=!ball[lu[j].ball2].flag;
}
lu[j].ball1=-1;
lu[j].ball2=-1;
}
}
for(int i=0;i<n;i++){
cout<<ball[i].set<<" ";
}
return 0;
}