CCF201803-2--碰撞的小球
程序员文章站
2022-06-07 09:55:43
...
**解题思路:
首先简化问题,当小球碰撞之后,a,b两个小球会反向行驶,这时你可以把a看作是b,把b看作是a,这样就可以忽略掉碰撞,把每一个小球是独立的行驶,单独算出每一个小球的最终停下的位置,然后排序,按照输入数据的大小排序输出停下的位置**
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct edge{
int id;
int place;
};
bool comp(const edge& e1,const edge& e2){
return e1.place<e2.place;
}
edge a[102];
int main(){
int n,L,t;
int b[102];
cin>>n>>L>>t;
for(int i=0;i<n;i++){
a[i].id=i;
cin>>a[i].place;
b[i]=a[i].place;
}
sort(a,a+n,comp);
for(int i=0;i<n;i++){
b[i]=(b[i]+t)%(2*L);
if(b[i]>L) b[i]=2*L-b[i];
}
sort(b,b+n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[j].id==i){
cout<<b[j]<<" ";
break;
}
}
}
cout<<endl;
return 0;
}
最后的搜索可以使用二分搜索,但因为此题n<100,所有枚举搜索不影响;
转载请标明出处:附上该文章链接
下一篇: 拉格朗日插值的应用