一二三四五 上山打老虎

CCF-CSP-2018-03-2碰撞的小球[规律题]

链接:http://118.190.20.162/view.page?gpid=T72

思路:初始在最左边的最终一定在最左边,通过初始位置很容易计算出看作其碰撞后是穿越对方情况的ts后最终的落点,再对所有最终点排序和初始点进行映射后输出即可。

代码:

#include<bits/stdc++.h>

using namespace std;
int a[(int)1e6+5];
int b[(int)1e6+5];
priority_queue<int>ve;
map<int,int>mp;
int main (){
    int n,l,t;
    cin>>n>>l>>t;
    for(int i=0;i<n;i++){
            cin>>a[i];
            ve.push(a[i]);
    }
    int tot=0;
    while(ve.size()){
        mp[ve.top()]=n-tot-1;
        ve.pop();
        tot++;
    }
    for(int i=0;i<n;i++){
        int atm=(a[i]+t)%(2*l);
        if(atm<=l)b[i]=atm;
        else b[i]=l-(atm%l);
    }
    sort(b,b+n);
    for(int i=0;i<n;i++){
        cout<<b[mp[a[i]]]<<" ";
    }
    return 0;
}

/*
1 1 2 2 2 1 1 2 2 0
*/

posted @ 2021-03-21 22:33  黒川川  阅读(60)  评论(0)    收藏  举报