• [CodeForces


        大致题意:

          有一个W*H的长方形,有n个人,分别站在X轴或Y轴,并沿直线向对面走,第i个人在ti的时刻出发,如果第i个人与第j个人相撞了

        那么则交换两个人的运动方向,直到走到长方形边界停止,问最后每个人的坐标。

        

        题解:

          两个人要相撞,当且仅当Xi-Ti=Xj-Tj,所以可以将Xi-Ti分组,对于同一组里的人会互相碰撞,不同组的不会,这样就只要考虑同一组里

        的人,画个图可以发现,规律

        然后根据规律化坐标即可

        

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<cmath>
     6 #include<vector>
     7 #include<queue>
     8 #include<set>
     9 #include<map>
    10 using namespace std;
    11 #define eps 1e-6
    12 #define For(i,a,b) for(int i=a;i<=b;i++)
    13 #define Fore(i,a,b) for(int i=a;i>=b;i--)
    14 #define lson l,mid,rt<<1
    15 #define rson mid+1,r,rt<<1|1
    16 #define mkp make_pair
    17 #define pb push_back
    18 #define sz size()
    19 #define met(a,b) memset(a,b,sizeof(a))
    20 #define iossy ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
    21 #define fr freopen
    22 #define pi acos(-1.0)
    23 #define Vector Point
    24 typedef pair<int,int> pii;
    25 const long long linf=1LL<<62;
    26 const int iinf=1<<30;
    27 const double dinf=1e17;
    28 const int Mod=1e9+9;
    29 typedef long long ll;
    30 typedef long double ld;
    31 const int maxn=1000005;
    32 struct node{
    33     int x,t,g;
    34     int id;
    35 };
    36 bool cmp(node a,node b){
    37     if(a.g==b.g){
    38         if(a.g==1) return a.x<b.x;
    39         if(a.g==2) return a.x>b.x;
    40     }
    41     return a.g<b.g;
    42 }
    43 bool cmp2(node a,node b){
    44     if(a.g==b.g) {
    45         if(a.g==1) return a.x<b.x;
    46         return a.x>b.x;
    47     }
    48     return a.g>b.g;
    49 }
    50 const int maxt=100005;
    51 vector<node>vc[maxn];
    52 vector<pair<int,int> >vcc;
    53 pii p,ans[maxn];
    54 node nd;
    55 int n,w,h;
    56 void solve(){
    57     iossy;
    58     cin>>n>>w>>h;
    59     For(i,1,n){
    60         cin>>nd.g>>nd.x>>nd.t;nd.id=i;
    61         vc[maxt+nd.x-nd.t].pb(nd);
    62     }
    63     For(i,0,maxt+maxt){
    64         vcc.clear();
    65         if(!vc[i].sz)continue;
    66         sort(vc[i].begin(),vc[i].end(),cmp);
    67         For(j,1,vc[i].sz){
    68             if(vc[i][j-1].g==1) vcc.pb(mkp(vc[i][j-1].x,h));
    69             else vcc.pb(mkp(w,vc[i][j-1].x));
    70         }
    71         sort(vc[i].begin(),vc[i].end(),cmp2);
    72         For(j,1,vc[i].sz){
    73             ans[vc[i][j-1].id]=vcc[j-1];
    74         }
    75     }
    76     For(i,1,n) 
    77         cout<<ans[i].first<<" "<<ans[i].second<<endl;
    78 }
    79 int main(){
    80     int t=1;
    81     while(t--) solve();
    82     return 0;
    83 }
    View Code
  • 相关阅读:
    6)从左到右依次递增,从上到下依次递减的数组
    2)PHP代码运行过程
    1)session总结
    3)ARP到底属于网络层还是链路层
    (2)链表中的一级指针和二级指针的问题
    javascript 封装ajax(多版本)
    javaScript中的两个叹号(!!)
    css获取背景中指定的位置
    解析this.initialize.apply(this, arguments);
    ul中嵌套div导致布局混乱
  • 原文地址:https://www.cnblogs.com/cjbiantai/p/9619868.html
Copyright © 2020-2023  润新知