/***
参考大佬的做法:dir用1和-1 表示,然后创新是pos + dir这句更新坐标的语句
总的做法是 先更新坐标,再遍历检查需要改变方向的两种情况
遇到了坑,写if语句忘了加括号
**/
#include <iostream>
#include <algorithm>
//#define debug
using namespace std;
struct Node{
int pos;
int dir;
}a[105];
int main(){
int n,i,k,j,L,t;
cin >> n >> L >>t;
for(i = 0;i < n;i++){
cin >> a[i].pos ;
a[i].dir = 1;
}
while(t--){
for(i = 0;i < n;i++){
a[i].pos += a[i].dir;
}
for(i = 0;i < n;i++){
if( (a[i].pos == 0 && a[i].dir == -1) || (a[i].pos == L && a[i].dir == 1) )
a[i].dir *= -1;
for(j = i + 1;j < n;j++){
if(a[i].pos == a[j].pos && (a[i].dir * a[j].dir == -1 ) ){
a[i].dir *= -1;
a[j].dir *= -1;
}//第一次错在这里,忘了加括号
}
}
}
for(i = 0;i < n;i++){
cout << a[i].pos << " ";
}
return 0;
}
CCF201803-2 碰撞的小球
最新推荐文章于 2021-04-08 13:44:12 发布