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
*/

浙公网安备 33010602011771号