欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CCF201803-2--碰撞的小球

程序员文章站 2022-06-07 09:55:43
...

CCF201803-2--碰撞的小球
CCF201803-2--碰撞的小球
CCF201803-2--碰撞的小球

**解题思路:
首先简化问题,当小球碰撞之后,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,所有枚举搜索不影响;

转载请标明出处:附上该文章链接

相关标签: C++ CCF 2018