CCF CSP 201803-2 碰撞的小球

題目連接:http://118.190.20.162/view.page?gpid=T72ios

問題描述
  數軸上有一條長度爲L(L爲偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球在線段上,開始時全部的小球都處在偶數座標上,速度方向向右,速度大小爲1單位長度每秒。
  當小球到達線段的端點(左端點或右端點)的時候,會當即向相反的方向移動,速度大小仍然爲原來大小。
  當兩個小球撞到一塊兒的時候,兩個小球會分別向與本身原來移動的方向相反的方向,以原來的速度大小繼續移動。
  如今,告訴你線段的長度L,小球數量n,以及n個小球的初始位置,請你計算t秒以後,各個小球的位置。
提示
  由於全部小球的初始位置都爲偶數,並且線段的長度爲偶數,能夠證實,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均爲整數。
  同時也能夠證實兩個小球發生碰撞的位置必定是整數(但不必定是偶數)。
輸入格式
  輸入的第一行包含三個整數n, L, t,用空格分隔,分別表示小球的個數、線段長度和你須要計算t秒以後小球的位置。
  第二行包含n個整數a1, a2, …, an,用空格分隔,表示初始時刻n個小球的位置。
輸出格式
  輸出一行包含n個整數,用空格分隔,第i個整數表明初始時刻位於ai的小球,在t秒以後的位置。
樣例輸入
3 10 5
4 6 8
樣例輸出
7 9 9
樣例說明
  初始時,三個小球的位置分別爲4, 6, 8。

  一秒後,三個小球的位置分別爲5, 7, 9。

  兩秒後,第三個小球碰到牆壁,速度反向,三個小球位置分別爲6, 8, 10。

  三秒後,第二個小球與第三個小球在位置9發生碰撞,速度反向(注意碰撞位置不必定爲偶數),三個小球位置分別爲7, 9, 9。

  四秒後,第一個小球與第二個小球在位置8發生碰撞,速度反向,第三個小球碰到牆壁,速度反向,三個小球位置分別爲8, 8, 10。

  五秒後,三個小球的位置分別爲7, 9, 9。
樣例輸入
10 22 30
14 12 16 6 10 2 8 20 18 4
樣例輸出
6 6 8 2 4 0 4 12 10 2
數據規模和約定
  對於全部評測用例,1 ≤ n ≤ 100,1 ≤ t ≤ 100,2 ≤ L ≤ 1000,0 < ai < L。L爲偶數。
  保證全部小球的初始位置互不相同且均爲偶數。
 
最開始理解的是兩球碰撞只能是相鄰的纔會,可是其實不必定的,因此須要兩層for循環每次兩兩判斷兩個球是否相碰撞的狀況,題目中的說明已經簡化了不少邊界會碰撞,兩球在同一點速度方向不一樣會產生碰撞,碰撞以後速度大小不變恆爲1可是方向改變爲相反的方向,不算難
 1 //CCF CSP 201803-2 碰撞的小球 
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 int n,L,t;
 6 int a[105];
 7 int b[105];
 8 int main()
 9 {
10     while(cin>>n>>L>>t){
11         for(int i=0;i<n;i++){
12             cin>>a[i];
13             b[i]=1;
14         } 
15         while(t--){
16             for(int i=0;i<n;i++){
17                 a[i]+=b[i];
18                 if(a[i]==L||a[i]==0){
19                     b[i]*=-1;;
20                 }
21             }
22             for(int i=0;i<n;i++){
23                 for(int j=i;j<n;j++){
24                     if(a[i]==a[j]&&(b[i]!=b[j])){
25                         b[i]*=-1;
26                         b[j]*=-1;
27                     }
28                 }
29             }
30         }
31         for(int i=0;i<n;i++){
32             if(i==0) cout<<a[i];
33             else cout<<" "<<a[i];
34         }
35         cout<<endl;
36     } 
37     return 0;
38 } 
相關文章
相關標籤/搜索