CCF 201803-2
阿新 • • 發佈:2019-01-06
這個題考慮到排序問題,有兩種思路:
1.不排序,遇邊界改變方向,暴力按時間走一秒比較與其他球的位置以確定下一秒的方向;
2.排序,遇邊界改變方向只需要比較與相鄰球的位置即可。
第一種方法程式碼入下:
#include <stdio.h> #define N 101 int pos[N]; int der[N]; int main() { int n,l,t,i,j; scanf("%d%d%d",&n,&l,&t); for(i=0;i<n;i++){ scanf("%d",&pos[i]); der[i]=1; if(pos[i]==0||pos[i]==l) der[i]*=-1; } while(t--){ for(i=0;i<n;i++){ pos[i]+=der[i]; //移動位置 if(pos[i]==0||pos[i]==l)//遇邊界改變方向 der[i]*=-1; } //兩球相撞改變方向 for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(pos[i]==pos[j]){ der[i]*=-1; der[j]*=-1; } } printf("%d",pos[0]); for(i=1;i<n;i++) printf(" %d",pos[i]); return 0; }