• Codeforces Round #532


    以后不放水题了

    C.NN and the Optical Illusion

    复习一下高中数学即可

    $frac{ans}{ans+r}=sin frac{pi}{n}$

    解方程

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const double pai=acos(-1);
     7 int n,d; double a;
     8 int main()
     9 {
    10     scanf("%d%d",&n,&d),a=pai/n;
    11     printf("%f",sin(a)*d/(1-sin(a)));
    12     return 0;
    13 }
    View Code

    D.Dasha and Chess

    先走到中间,然后背对着车最少的那个角落走,根据咕咕原理可知这边最少有 666*3/4=499.5— —也就是500 只车,而走过去只需要499步,所以一定能被将到;总步数最多499+499步

     1  #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int N=1000;
     6 pair<int,int> rook[N];
     7 int t1,t2,t3,kx,ky,mini;
     8 int ocp[N][N],cnt[2][2];
     9 void Check()
    10 {
    11     if(t1<=0) exit(0); 
    12 }
    13 void Move(int xx,int yy)
    14 {
    15     kx+=xx,ky+=yy;
    16     if(ocp[kx][ky]) kx-=xx;
    17     printf("%d %d
    ",kx,ky),fflush(stdout);
    18     scanf("%d%d%d",&t1,&t2,&t3),Check();
    19     int rx=rook[t1].first,ry=rook[t1].second;
    20     ocp[rx][ry]=false,rook[t1]=make_pair(t2,t3),ocp[t2][t3]=true;
    21 }
    22 int main()
    23 {
    24     scanf("%d%d",&kx,&ky),mini=1e9;
    25     for(int i=1;i<=666;i++)
    26     {
    27         scanf("%d%d",&t1,&t2);
    28         rook[i]=make_pair(t1,t2),ocp[t1][t2]=true;
    29     }
    30     while(kx<500) Move(1,0);
    31     while(kx>500) Move(-1,0);
    32     while(ky<500) Move(0,1);
    33     while(ky>500) Move(0,-1);
    34     for(int i=1;i<=999;i++)
    35         for(int j=1;j<=999;j++)
    36             if(ocp[i][j]) cnt[i>500][j>500]++;
    37     for(int i=0;i<=1;i++)
    38         for(int j=0;j<=1;j++)
    39             if(cnt[i][j]<mini) mini=cnt[i][j];
    40     for(int i=0;i<=1;i++)
    41         for(int j=0;j<=1;j++)
    42             if(cnt[i][j]==mini)
    43                 while(true) Move(i?-1:1,j?-1:1);
    44     return 0;
    45 }
    View Code

    E.Andrew and Taxi

    首先一定有解,构造方法是所有边都是小编号指向大编号,那么二分答案对大于答案的边跑拓扑排序检验即可

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int N=100005;
     6 struct a
     7 {
     8     int u,v,w;
     9 }edg[N];
    10 int p[N],noww[N],goal[N];
    11 int deg[N],idx[N],que[N],outp[N];
    12 int n,m,f,b,t1,t2,t3,cnt,num,ans;
    13 void Link(int f,int t)
    14 {
    15     noww[++cnt]=p[f],p[f]=cnt;
    16     goal[cnt]=t,deg[t]++;
    17 }
    18 bool Nocir(int x)
    19 {
    20     num=0,cnt=0,f=0,b=-1;
    21     memset(p,0,sizeof p);
    22     memset(deg,0,sizeof deg);
    23     for(int i=1;i<=m;i++)
    24         if(edg[i].w>x)
    25             Link(edg[i].u,edg[i].v);
    26     for(int i=1;i<=n;i++)
    27         if(!deg[i]) que[++b]=i;
    28     while(f<=b)
    29     {
    30         int tn=que[f++]; idx[tn]=++num;
    31         for(int i=p[tn];i;i=noww[i])
    32             if(!(--deg[goal[i]]))
    33                 que[++b]=goal[i];
    34     }
    35     for(int i=1;i<=n;i++)
    36         if(deg[i]) return false;
    37     return true;
    38 }
    39 int main()
    40 {
    41     scanf("%d%d",&n,&m);
    42     for(int i=1;i<=m;i++)
    43     {
    44         scanf("%d%d%d",&t1,&t2,&t3);
    45         edg[i]=(a){t1,t2,t3},ans=max(ans,t3);
    46     }
    47     int l=0,r=ans;
    48     while(l<=r)
    49     {
    50         int mid=(l+r)/2;
    51         if(Nocir(mid)) r=mid-1,ans=mid;
    52         else l=mid+1;
    53     }
    54     Nocir(ans);
    55     for(int i=1;i<=m;i++)
    56         if(edg[i].w<=ans&&idx[edg[i].u]>idx[edg[i].v])    
    57             outp[++outp[0]]=i;
    58     printf("%d %d
    ",ans,outp[0]);
    59     for(int i=1;i<=outp[0];i++)
    60         printf("%d ",outp[i]);
    61     return 0;
    62 }
    View Code

    F.Ivan and Burgers

    恭喜出题人获得了“出到原题”成就

    ???

    然后就被踩标算了

     1 #include<cstdio>
     2 #include<vector>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=500005,K=32;
     7 vector<pair<int,int> > ve[N]; 
     8 vector<pair<int,int> > ::iterator it;
     9 int n,m,t1,t2,val[N],ans[N],bas[K],pos[K];
    10 void Insert(int x,int y)
    11 {
    12     for(int i=21;~i;i--)
    13         if(x&(1<<i))
    14         {
    15             if(!bas[i])
    16             {
    17                 bas[i]=x,pos[i]=y;
    18                 return;
    19             }
    20             if(y>pos[i])
    21                 swap(x,bas[i]),swap(y,pos[i]);
    22             x^=bas[i];
    23         }
    24 }
    25 int main()
    26 {
    27     scanf("%d",&n);
    28     for(int i=1;i<=n;i++)
    29         scanf("%d",&val[i]);
    30     scanf("%d",&m);
    31     for(int i=1;i<=m;i++)
    32     {
    33         scanf("%d%d",&t1,&t2);
    34         ve[t2].push_back(make_pair(t1,i));
    35     }
    36     for(int i=1;i<=n;i++)
    37     {
    38         Insert(val[i],i);
    39         for(it=ve[i].begin();it!=ve[i].end();it++)
    40         {
    41             int lef=it->first,idx=it->second;
    42             for(int j=21;~j;j--)
    43                 if(pos[j]>=lef&&(ans[idx]^bas[j])>ans[idx])
    44                     ans[idx]^=bas[j];
    45         }
    46     }
    47     for(int i=1;i<=m;i++)
    48         printf("%d
    ",ans[i]);
    49     return 0;
    50 }
    View Code
  • 相关阅读:
    前端——DOM
    前端——JavaScript
    前端——HTML
    初学Python——协程
    初学Python——进程
    初学Python——线程
    初学Python——Socket网络编程
    初学Python——RabbitMQ的安装
    初学Python——面向对象(二)
    muduo网络库源码学习————线程池实现
  • 原文地址:https://www.cnblogs.com/ydnhaha/p/10275757.html
Copyright © 2020-2023  润新知