しょうげきボール

4186 ワード

問題は、数軸に長さL(Lは偶数)の線分があり、左端点が原点、右端点が座標Lにあることを示しています.体積を問わないn個の小球が線分上にあり,開始時にはすべての小球が偶数座標上にあり,速度方向は右,速度サイズは1単位長毎秒であった.小球が線分の端点(左端または右端)に達すると、すぐに反対方向に移動し、速度の大きさは元の大きさになります.2つのボールがぶつかると、2つのボールはそれぞれ自分の元の移動方向とは反対の方向に、元の速度の大きさで移動し続けます.ここで、線分の長さL、小球数n、およびn個の小球の初期位置を教えて、t秒後、各小球の位置を計算してください.ヒント:すべての小球の初期位置が偶数であり、セグメントの長さが偶数であるため、3つの小球が同時に衝突することはなく、小球がセグメントの端点に到達し、小球間の衝突時刻が整数であることが証明されている.同時に、2つの小球が衝突する位置は必ず整数である(ただし、必ずしも偶数ではない)ことを証明することもできる.入力フォーマットで入力した最初の行には、3つの整数n,L,tが含まれており、スペースで区切られており、小球の個数、線分の長さ、t秒後の小球の位置を計算する必要があります.2行目はn個の整数a 1,a 2,...,anを含み,初期時刻のn個の小球の位置をスペースで区切る.出力フォーマット出力1行にはn個の整数が含まれ、スペースで区切られ、i番目の整数は初期時刻aiにある小球を表し、t秒後の位置を表す.サンプル入力3 10 5 4 6 8サンプル出力7 9サンプル説明初期時、3つのボールの位置はそれぞれ4,6,8であった.1秒後、3つのボールの位置はそれぞれ5、7、9だった.2秒後、3番目のボールが壁にぶつかり、速度が逆転し、3つのボールの位置はそれぞれ6、8、10だった.3秒後、2番目の小球と3番目の小球が位置9で衝突し、速度が逆方向(衝突位置が必ずしも偶数ではないことに注意)、3つの小球の位置はそれぞれ7,9,9であった.4秒後、第1の小球と第2の小球が位置8で衝突し、速度が逆になり、第3の小球が壁にぶつかり、速度が逆になり、3つの小球の位置はそれぞれ8,8,10となった.5秒後、3つのボールの位置はそれぞれ7、9、9だった.サンプル入力10 22 30 14 16 16 6 10 2 8 18 4サンプル出力6 6 8 2 4 0 4 12 2
データ規模と約定は、すべての評価例について、1≦n≦100、1≦t≦100、2≦L≦1000、0構想
小球の衝突は,小球が互いに貫通して動き続けると見なすことができ,境界を超えると対称的に処理される.
#include
using namespace std;
const int maxx= 100+20;

int l;
int change(int shu){//            ,         
    while(shu< 0||shu> l){
        while(shu< 0){
            shu= -shu;
        }
        while(shu> l){
            shu= 2*l- shu;
        }
    } 
    return shu;
}
int main(){

    int n, t;
    cin>>n>>l>>t;

    int vec[maxx];
    vector<int> pos(maxx, 0); 
    memset(vec, 0, sizeof(vec));
    for(int i= 0; i< n;i++)
     cin>>vec[i];



     for(int i= 0; i< n; i++){//   0 n     n     
      //      
         int count= 0;
        for(int j= 0; j< n; j++){
            if(vec[i]> vec[j])
             count++;
         }
         pos[i]= count;
     }

     for(int i= 0; i< n; i++){

        vec[i]= change(vec[i]+ t);//       
     }

     sort(vec, vec+n);
     for(int  i= 0; i< n; i++){
        cout<' ';//          
     }
     cout<return 0;
}