zoukankan      html  css  js  c++  java
  • 2017 ACM/ICPC Asia Regional Beijing Online

    A Visiting Peking University

    直接模拟

    B Reverse Suffix Array

    unsolved

    C Matrix

    预处理每列前缀和以及每个每个行区间的每列的最小值,枚举行的所有区间,求最长连续字段和。

    D Agent Communication

    unsolved

    E Territorial Dispute

    n=1,2时不行

    n=3时必须三点共线

    n>3一定可以,任意找四个点判断即可。

    好像也可以跑凸包,不在凸包上的点单独分开,如果全部在凸包上,找两个不相邻的点即可。

      1 #include <bits/stdc++.h>
      2 #define lson (id*2)
      3 #define rson (id*2+1)
      4 #define mid ((l+r)/2)
      5 using namespace std;
      6 
      7 typedef long long LL;
      8 const LL MAXN=1e3+5;
      9 
     10 LL n;
     11 struct PoLL{
     12     LL x,y,id;
     13 } p[MAXN];
     14 bool cmp(PoLL a,PoLL b){
     15     if(a.x==b.x) return a.y<b.y;
     16     return a.x<b.x;
     17 }
     18 LL vis[MAXN];
     19 
     20 LL cross(PoLL a,PoLL b){
     21     return a.x*b.y-a.y*b.x;
     22 }
     23 
     24 int main(){
     25     LL t;
     26     scanf("%lld",&t);
     27     while(t--){
     28         memset(vis,0,sizeof(vis));
     29         scanf("%lld",&n);
     30         for(LL i=1;i<=n;i++){
     31             scanf("%lld%lld",&p[i].x,&p[i].y);
     32             p[i].id=i;
     33         }
     34         sort(p+1,p+1+n,cmp);
     35         if(n<=2){
     36             printf("NO
    ");
     37             continue;
     38         }
     39         else if(n==3){
     40             PoLL a=(PoLL){p[2].x-p[1].x,p[2].y-p[1].y};
     41             PoLL b=(PoLL){p[3].x-p[2].x,p[3].y-p[2].y};
     42             if(cross(a,b)==0) vis[p[2].id]=1;
     43             else{
     44                 printf("NO
    ");
     45                 continue;
     46             }
     47         }
     48         else{
     49             LL flag=0;
     50             for(int tt=1;tt<=4;tt++){
     51                 int i,j,k;
     52                 if(tt==1) j=1,i=2,k=3;
     53                 if(tt==2) j=1,i=2,k=4;
     54                 if(tt==3) j=1,i=3,k=4;
     55                 if(tt==4) j=2,i=3,k=4;
     56                 PoLL ak=(PoLL){p[i].x-p[j].x,p[i].y-p[j].y};
     57                 PoLL bk=(PoLL){p[k].x-p[i].x,p[k].y-p[i].y};
     58                 if(cross(ak,bk)==0){
     59                     vis[p[i].id]=1;
     60                     flag=1;
     61                     break;
     62                 }
     63             }
     64 
     65             if(flag==0)
     66             for(LL i=1;i<=4;i++)
     67             for(LL j=1;j<=4;j++)
     68             for(LL k=1;k<=4;k++)
     69             for(LL q=1;q<=4;q++){
     70                 if(flag) break;
     71                 if(i==j||i==k||i==q) continue;
     72                 if(j==k||j==q||k==q) continue;
     73                 PoLL aa=(PoLL){p[i].x-p[j].x,p[i].y-p[j].y};
     74                 PoLL bb=(PoLL){p[i].x-p[k].x,p[i].y-p[k].y};
     75                 PoLL cc=(PoLL){p[i].x-p[q].x,p[i].y-p[q].y};
     76                 LL s1=abs(cross(aa,bb))+abs(cross(aa,cc))+abs(cross(bb,cc));
     77 
     78                 PoLL dd=(PoLL){p[j].x-p[k].x,p[j].y-p[k].y};
     79                 PoLL ee=(PoLL){p[q].x-p[k].x,p[q].y-p[k].y};
     80                 LL s2=abs(cross(dd,ee));
     81                 if(s1==s2){
     82                     flag=1;
     83                     vis[p[i].id]=1;
     84                     break;
     85                 }
     86             }
     87 
     88             if(flag==0)
     89             for(LL i=1;i<=4;i++)
     90             for(LL j=1;j<=4;j++)
     91             for(LL k=1;k<=4;k++)
     92             for(LL q=1;q<=4;q++){
     93                 if(flag) break;
     94                 if(i==j||i==k||i==q) continue;
     95                 if(j==k||j==q||k==q) continue;
     96                 PoLL aa=(PoLL){p[i].x-p[j].x,p[i].y-p[j].y};
     97                 PoLL bb=(PoLL){p[i].x-p[k].x,p[i].y-p[k].y};
     98                 PoLL cc=(PoLL){p[i].x-p[q].x,p[i].y-p[q].y};
     99                 if(cross(aa,bb)*cross(aa,cc)<0){
    100                     vis[p[i].id]=vis[p[j].id]=1;
    101                     flag=1;
    102                     break;
    103                 }
    104             }
    105             if(!flag){
    106                 printf("NO
    ");
    107                 continue;
    108             }
    109         }
    110         printf("YES
    ");
    111         for(LL i=1;i<=n;i++){
    112             if(vis[i]) printf("A");
    113             else printf("B");
    114         }
    115         printf("
    ");
    116     }
    117 
    118     return 0;
    119 }
    Psong

    F Cake

    unsolved

    G Bounce

    经过的总数:res=(n-1)*(m-1)/gcd(n-1,m-1)+1

    交点与拐点:(res-1)/gcd(n-1,m-1)

    拐点个数:(n-1)/gcd(n-1,m-1)+(m-1)/gcd(n-1,m-1)-1

     1 #include <bits/stdc++.h>
     2 #define lson (id*2)
     3 #define rson (id*2+1)
     4 #define mid ((l+r)/2)
     5 using namespace std;
     6 
     7 typedef long long LL;
     8 
     9 LL gcd(LL x,LL y){
    10     return y==0?x:gcd(y,x%y);
    11 }
    12 
    13 int main(){
    14     LL n,m,k;
    15     while(cin>>n>>m){
    16         LL G=gcd(n-1,m-1);
    17         LL res=(n-1)*(m-1)/G+1;
    18         res=res-(res-1)/G+(n-1)/G+(m-1)/G-1;
    19         cout<<res<<endl;
    20     }
    21 
    22     return 0;
    23 }
    Psong

    H Polynomial Product

    unsolved

    I Minimal

    线段树维护最大最小正负四个值即可

      1 #include <bits/stdc++.h>
      2 #define lson (id*2)
      3 #define rson (id*2+1)
      4 #define mid ((l+r)/2)
      5 using namespace std;
      6 
      7 typedef long long LL;
      8 const int MAXN=2e5+5;
      9 const int inf=0x3f3f3f3f;
     10 
     11 int n,q;
     12 int a[MAXN];
     13 
     14 struct node{
     15     int val;
     16     int mizhen,mafu;
     17     int mi,ma;
     18 } tre[MAXN*4],ans;
     19 
     20 void push_up(int id,int ls,int rs){
     21     tre[id].mizhen=min(tre[ls].mizhen,tre[rs].mizhen);
     22     tre[id].mafu=max(tre[ls].mafu,tre[rs].mafu);
     23     tre[id].mi=min(tre[ls].mi,tre[rs].mi);
     24     tre[id].ma=max(tre[ls].ma,tre[rs].ma);
     25 }
     26 void build(int id,int l,int r){
     27     if(l==r){
     28         tre[id].mi=tre[id].ma=tre[id].val=a[l];
     29         if(a[l]>0){
     30             tre[id].mizhen=a[l];
     31             tre[id].mafu=-inf;
     32         }
     33         if(a[l]<0){
     34             tre[id].mizhen=inf;
     35             tre[id].mafu=a[l];
     36         }
     37         if(a[l]==0){
     38             tre[id].mizhen=a[l];
     39             tre[id].mafu=a[l];
     40         }
     41         return;
     42     }
     43     build(lson,l,mid);
     44     build(rson,mid+1,r);
     45     push_up(id,lson,rson);
     46 }
     47 
     48 void update(int id,int l,int r,int pos,int tt){
     49     if(l==r){
     50         tre[id].mi=tre[id].ma=tre[id].val=tt;
     51         if(tt>=0){
     52             tre[id].mizhen=tt;
     53             tre[id].mafu=-inf;
     54         }
     55         if(tt<=0){
     56             tre[id].mizhen=inf;
     57             tre[id].mafu=tt;
     58         }
     59         return;
     60     }
     61     if(pos<=mid)
     62         update(lson,l,mid,pos,tt);
     63     else
     64         update(rson,mid+1,r,pos,tt);
     65     push_up(id,lson,rson);
     66 }
     67 
     68 void query(int id,int l,int r,int ql,int qr){
     69     if(ql<=l&&r<=qr){
     70         ans.mizhen=min(ans.mizhen,tre[id].mizhen);
     71         ans.mafu=max(ans.mafu,tre[id].mafu);
     72         ans.ma=max(ans.ma,tre[id].ma);
     73         ans.mi=min(ans.mi,tre[id].mi);
     74         return;
     75     }
     76     if(ql<=mid)
     77         query(lson,l,mid,ql,qr);
     78     if(mid+1<=qr)
     79         query(rson,mid+1,r,ql,qr);
     80 }
     81 
     82 void solve(){
     83     LL res=(LL)ans.mi*ans.ma;
     84     res=min(res,(LL)ans.mi*ans.mi);
     85     res=min(res,(LL)ans.ma*ans.ma);
     86     if(ans.mafu!=-inf){
     87         res=min(res,(LL)ans.mafu*ans.mafu);
     88         res=min(res,(LL)ans.mafu*ans.mi);
     89         res=min(res,(LL)ans.mafu*ans.ma);
     90     }
     91     if(ans.mizhen!=inf){
     92         res=min(res,(LL)ans.mizhen*ans.mizhen);
     93         res=min(res,(LL)ans.mizhen*ans.mi);
     94         res=min(res,(LL)ans.mizhen*ans.ma);
     95     }
     96     if(ans.mafu!=-inf&&ans.mizhen!=inf) res=min(res,(LL)ans.mafu*ans.mizhen);
     97     printf("%lld
    ",res);
     98 }
     99 
    100 int main(){
    101     int t;
    102     scanf("%d",&t);
    103     while(t--){
    104         scanf("%d",&n);
    105         n=(1<<n);
    106         for(int i=1;i<=n;i++)
    107             scanf("%d",&a[i]);
    108         build(1,1,n);
    109         scanf("%d",&q);
    110         while(q--){
    111             int op,x,y;
    112             scanf("%d%d%d",&op,&x,&y);
    113             if(op==1){
    114                 x++; y++;
    115                 ans.mi=ans.mizhen=inf;
    116                 ans.ma=ans.mafu=-inf;
    117                 query(1,1,n,x,y);
    118                 solve();
    119             }
    120             else{
    121                 x++;
    122                 update(1,1,n,x,y);
    123             }
    124         }
    125     }
    126 
    127     return 0;
    128 }
    Psong

    J Typist's Problem

    unsolved

  • 相关阅读:
    web前段学习2017.6.15
    web前段学习2017.6.13
    web前端2017.6.10
    web前段2017.6.8
    web前段学习2016.6.6
    宏任务与微任务
    浏览器兼容性问题
    TCP 和 UDP 的区别
    React如何渲染大数据量的列表?
    移动端兼容性问题
  • 原文地址:https://www.cnblogs.com/N-Psong/p/7603155.html
Copyright © 2011-2022 走看看