• Codeforces956D. Contact ATC


    $n leq 100000$个飞机在坐标轴上,给坐标给速度,坐标速度异号,还有一个风速在$[-w,w]$区间,$w$比最小的速度绝对值要小。由于风速不知道,所以问有多少对飞机可能在原点相遇。

    思维定势:$frac{x_i}{v_i+v}=frac{x_j}{v_j+v}$,$v$是风速,然后推下去,会推到一个三维偏序。。

    没有观察题目性质。这个时间是关于风速单调而连续的,所以只要风速最小和风速最大这两个东西求个逆序对就行了。

    似乎卡精度,用了分数。

    这种题要写题解感觉最近脑子有点锈。。有没有神犇愿意帮忙除个锈啊QAQ

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 //#include<math.h>
     5 //#include<queue>
     6 //#include<vector>
     7 #include<algorithm>
     8 //#include<iostream>
     9 //#include<assert.h>
    10 using namespace std;
    11 
    12 int n,w;
    13 #define maxn 200011
    14 
    15 struct frac
    16 {
    17     int a,b;
    18     bool operator < (const frac &x) const {return 1ll*a*x.b<1ll*b*x.a;}
    19     bool operator == (const frac &x) const {return 1ll*a*x.b==1ll*b*x.a;}
    20 };
    21 
    22 struct Poi{frac x,y; int z;}p[maxn];
    23 bool cmpx(const Poi &a,const Poi &b) {return b.x<a.x || (a.x==b.x && a.y<b.y);}
    24 frac lisa[maxn]; int li=0;
    25 
    26 struct BIT
    27 {
    28     int a[maxn],n;
    29     void clear(int m) {n=m;}
    30     void add(int x,int v) {for (;x<=n;x+=x&-x) a[x]+=v;}
    31     int query(int x) {int ans=0; for (;x;x-=x&-x) ans+=a[x]; return ans;}
    32 }t;
    33 
    34 #define LL long long
    35 int main()
    36 {
    37     scanf("%d%d",&n,&w);
    38     for (int i=1,a,b;i<=n;i++)
    39     {
    40         scanf("%d%d",&a,&b);
    41         if (a<0) p[i].x=(frac){-a,b-w},p[i].y=(frac){-a,b+w};
    42         else p[i].x=(frac){a,w-b},p[i].y=(frac){a,-w-b};
    43         lisa[++li]=p[i].y;
    44     }
    45     sort(lisa+1,lisa+1+li);
    46     for (int i=1;i<=n;i++) p[i].z=lower_bound(lisa+1,lisa+1+li,p[i].y)-lisa;
    47     
    48     sort(p+1,p+1+n,cmpx);
    49     t.clear(n);
    50     LL ans=0;
    51     for (int i=1;i<=n;i++)
    52     {
    53         ans+=t.query(p[i].z);
    54         t.add(p[i].z,1);
    55     }
    56     printf("%lld
    ",ans);
    57     return 0;
    58 }
    View Code
  • 相关阅读:
    iPhone 调用Web Service 例子(转)
    iPhone开发:在UIAlertView中显示进度条(转)
    Oracel 分页
    NYOJ 477
    NYOJ 108(数组中存的是前n个数的和)
    NYOJ 199
    NYOJ 311(完全背包)
    高效斐数(前92位)
    NYOJ 57(6174问题)
    NYOJ 546(分珠宝)
  • 原文地址:https://www.cnblogs.com/Blue233333/p/8797934.html
Copyright © 2020-2023  润新知