201803-2 碰撞的小球
题目
思路
AC代码如下
#include<cstdio>
#include<cstring>
int main(){
int a[105],t,L,n,dir[105],ocup[1005];//ocup数组记录占领各个位置的小球
scanf("%d%d%d",&n,&L,&t);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
dir[i]=1;//1表示向右,-1表示向左
}
for(int p=1;p<=t;p++){
memset(ocup,0,sizeof(ocup));
for(int i=1;i<=n;i++){
a[i]+=dir[i];
if(ocup[a[i]]){//碰撞了
dir[i]=-dir[i];
dir[ocup[a[i]]]*=-1;
}
else ocup[a[i]]=i;
if(a[i]==L||a[i]==0) dir[i]=-dir[i];
}
}
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}