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

  • 相关阅读:
    jQuery EasyUI API 中文文档 数字框(NumberBox)
    jQuery EasyUI API 中文文档 数值微调器(NumberSpinner)
    jQuery EasyUI API 中文文档 日期时间框(DateTimeBox)
    jQuery EasyUI API 中文文档 微调器(Spinner)
    jQuery EasyUI API 中文文档 树表格(TreeGrid)
    jQuery EasyUI API 中文文档 树(Tree)
    jQuery EasyUI API 中文文档 属性表格(PropertyGrid)
    EntityFramework 数据操作
    jQuery EasyUI API 中文文档 对话框(Dialog)
    jQuery EasyUI API 中文文档 组合表格(ComboGrid)
  • 原文地址:https://www.cnblogs.com/N-Psong/p/7603155.html
Copyright © 2011-2022 走看看