zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    网络七层
    微信小程序开发工具 常用快捷键
    BZOJ 1026 windy数 (数位DP)
    BZOJ 1026 windy数 (数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3709 Balanced Number (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
  • 原文地址:https://www.cnblogs.com/cjbiantai/p/9619868.html
Copyright © 2011-2022 走看看