• hdu5714 拍照[2016百度之星复赛C题]


      由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可以在[y-z,x+z]这些位置观测到它,这些位置的观测数全都+1,然后考虑不同方向,假设初始在x位置观测往右的船,在y位置观测到往左的船,只要x<=y,则经过一段时间的移动,必然存在一个位置可以同时观测到x位置和y位置能观测到的船。复杂度O(nlogn)。

      代码

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<queue>
     4 #include<map>
     5 #define mp make_pair
     6 #define pb push_back
     7 #define fi first
     8 #define sc second
     9 using namespace std;
    10 const int N = 110100;
    11 const int M = 101010;
    12 int test,a,b,c,d,i,f1[N],f2[N],g1[N],g2[N],n,s1[N],s2[N],tmp,ans,ii,tot;
    13 int cnt1,cnt2,tt,ttt,vv[N];
    14 struct g{
    15     int l,r,id;
    16 }v[N];
    17 map<int,int> ma;
    18 int main()
    19 {
    20     scanf("%d",&test);
    21     while (test--)
    22     {
    23         scanf("%d",&n);
    24         tt=0;ttt=0;ma.clear();tot=0;
    25         for (i=1;i<=n;i++)
    26         {
    27             scanf("%d%d%d%d",&a,&b,&c,&d);
    28             if (a+c>=b-c)
    29             {
    30                 tot++;
    31                 v[tot].l=b-c;
    32                 v[tot].r=a+c;
    33                 v[tot].id=d;
    34                 vv[++tt]=b-c;
    35                 vv[++tt]=a+c;
    36             }
    37         }
    38         sort(vv+1,vv+1+tt);
    39         for (i=1;i<=tt;i++)
    40         if (ma[vv[i]]==0) ma[vv[i]]=++ttt;
    41         for (i=1;i<=tot;i++)
    42         if (v[i].id==1)
    43         {
    44             f1[ma[v[i].l]]++;
    45             g1[ma[v[i].r]]--;
    46         }
    47         else
    48         {
    49             f2[ma[v[i].l]]++;
    50             g2[ma[v[i].r]]--;
    51         }
    52         tmp=ans=cnt1=cnt2=0;
    53         for (i=1;i<=ttt;i++)
    54         {
    55             cnt1+=f1[i];
    56             s1[i]=cnt1;
    57             cnt1+=g1[i];
    58             cnt2+=f2[i];
    59             s2[i]=cnt2;
    60             cnt2+=g2[i];
    61             if (s1[i]>tmp) tmp=s1[i];
    62             ans=max(ans,tmp+s2[i]);
    63             f1[i]=f2[i]=g1[i]=g2[i]=0;
    64         }    
    65         ii++;
    66         printf("Case #%d:
    %d
    ",ii,ans);
    67     }
    68 }
  • 相关阅读:
    laravel 生成key
    nginx thinkphp5 多入口配置
    php微信退款通知 解密
    微信退款 报错 SSL certificate not found: cert/apiclient_cert.pem
    laradock 进入 工作区
    laradock mysql 报错 No such file or directory,Connection refused
    mac 安装数据库管理软件 sequel-pro
    docker windows7 安装
    [USACO10FEB] 吃巧克力Chocolate Eating (二分答案)
    P1613 跑路 (最短路,倍增)
  • 原文地址:https://www.cnblogs.com/fzmh/p/5540271.html
Copyright © 2020-2023  润新知