zoukankan      html  css  js  c++  java
  • 题解 Codeforces Round #618 (Div. 1) (Div. 2) (CF1299) (CF1300)

    A:读进来就把0搞成1,S!=0就直接输出,S=0判一下有没有不是-1的,有不是-1的就+1否则+2。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #define it register int
     5 #define ct const int
     6 #define il inline 
     7 using namespace std;
     8 const int N=100005;
     9 int n,T,a[N];
    10 namespace io{
    11     il char nc(){
    12         static char buf[100000],*p1=buf,*p2=buf;
    13         return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; 
    14     }
    15     template <class I> 
    16     il void fr(I &num){
    17         num=0;register char c=nc();it p=1;
    18         while(c<'0'||c>'9') c=='-'?p=-1,c=nc():c=nc();
    19         while(c>='0'&&c<='9') num=num*10+c-'0',c=nc();
    20         num*=p;
    21     } 
    22 }
    23 using io ::fr;
    24 int main(){
    25     fr(T);
    26     while(T--){
    27         fr(n);it ans=0,s=0;
    28         for(it i=1;i<=n;++i){
    29             fr(a[i]);
    30             if(!a[i]) ++ans,a[i]=1;
    31             s+=a[i];
    32         }
    33         if(s){printf("%d
    ",ans);continue;}
    34         it flag=2;
    35         for(it i=1;i<=n;++i)
    36             if(a[i]!=-1){flag=1;break;}
    37         printf("%d
    ",ans+flag);
    38     }
    39     return 0;
    40 }
    A

    B:我甚至没怎么看懂题就大力猜结论然后过了。。肯定是排序后两个中间的数相减啊。。因为在它们前面和后面的数可以把它们推到新的两边数组的中位数上。。。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #define it register int
     5 #define ct const int
     6 #define il inline 
     7 using namespace std;
     8 const int N=1000005;
     9 int a[N],n,T;
    10 namespace io{
    11     il char nc(){
    12         static char buf[100000],*p1=buf,*p2=buf;
    13         return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; 
    14     }
    15     template <class I> 
    16     il void fr(I &num){
    17         num=0;register char c=nc();it p=1;
    18         while(c<'0'||c>'9') c=='-'?p=-1,c=nc():c=nc();
    19         while(c>='0'&&c<='9') num=num*10+c-'0',c=nc();
    20         num*=p;
    21     } 
    22 }
    23 using io ::fr;
    24 int main(){
    25     it T;fr(T);
    26     while(T--){
    27         fr(n),n<<=1;
    28         for(it i=1;i<=n;++i) fr(a[i]);
    29         std::sort(a+1,a+1+n);
    30         printf("%d
    ",a[n/2+1]-a[n/2]);
    31     }
    32     return 0;
    33 }
    B

    C:看错数据范围交了十几发。。一个结论是f(f(a,b),c)=f(a,b|c),然后f(a,b)就是把a,b共有的位置减掉。所以找到一个ai,使得它的最高位1只有它拥有,把它扔到前面去,其他的不用排。。坑点是要判断这样的ai有没有。。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #define it register int
     5 #define ct const int
     6 #define il inline 
     7 using namespace std;
     8 const int N=1000005;
     9 int ans,ID,id,a[N],n,b[N],cn[N];
    10 namespace io{
    11     il char nc(){
    12         static char buf[100000],*p1=buf,*p2=buf;
    13         return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; 
    14     }
    15     template <class I> 
    16     il void fr(I &num){
    17         num=0;register char c=nc();it p=1;
    18         while(c<'0'||c>'9') c=='-'?p=-1,c=nc():c=nc();
    19         while(c>='0'&&c<='9') num=num*10+c-'0',c=nc();
    20         num*=p;
    21     } 
    22 }
    23 using io ::fr;
    24 il void fj(it x){
    25     for(it i=31;~i;--i)
    26         if(x&(1<<i)) ++cn[i];
    27 }
    28 int main(){
    29     fr(n);
    30     for(it i=1;i<=n;++i) fr(a[i]),++ID,fj(a[i]);
    31     ID=0;
    32     for(it i=31;~i;--i)if(cn[i]==1){ID=1<<i;break;}
    33     for(it i=1;i<=n;++i) if((a[i]&ID)==ID){id=i;break;}
    34     if(id) printf("%d ",a[id]);
    35     for(it i=1;i<=n;++i) if(i^id) printf("%d ",a[i]);
    36     return 0;
    37 }  
    C

    D:

    萌神:你为什么只做了ABCE?

    我:因为我网速慢看不到D的图片~

    萌神:D就是判断是不是中心对称图形啊

    我:这么**?

    萌神:但你得推出来这一步~

    (其实萌神就是疯狂暗示我:你这个菜鸡哪里推得出来!)

     1 #include<stdio.h>
     2 #define it register int
     3 #define il inline
     4 const int N=1000005;
     5 int x[N],y[N],n,a,b;
     6 namespace io{
     7     il char nc(){
     8         static char buf[100000],*p1=buf,*p2=buf;
     9         return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; 
    10     }
    11     template <class I> 
    12     il void fr(I &num){
    13         num=0;register char c=nc();it p=1;
    14         while(c<'0'||c>'9') c=='-'?p=-1,c=nc():c=nc();
    15         while(c>='0'&&c<='9') num=num*10+c-'0',c=nc();
    16         num*=p;
    17     } 
    18 }
    19 using io ::fr;
    20 int main(){
    21     fr(n);
    22     if(n&1) return puts("NO"),0;
    23     for(it i=1;i<=n;++i) fr(x[i]),fr(y[i]);
    24     n>>=1,a=x[1]+x[n+1],b=y[1]+y[n+1];
    25     for(it i=2;i<=n;++i)
    26         if(x[i]+x[n+i]!=a||y[i]+y[n+i]!=b) return puts("NO"),0;
    27     puts("YES");
    28     return 0;
    29 }
    D

    E:贪心。记录一下这一层的和以及个数,尽量让前面小的更优。(我记得yg说Div1的贪心难得一批?yg出来挨打!)

    代码暂时不贴(怕fst身败名裂)

    upd:我毒奶我自己,E真的被叉掉了。。那,有(gu)空(gu)来(gu)补(gu)吧(?)

  • 相关阅读:
    【专题总结】数学(未完)
    如何使用SOCKS代理通过aiohttp发出请求?(How to use SOCKS proxies to make requests with aiohttp?)
    通过 alembic 重命名表列名(Model字段名)
    Supervisor使用详解
    MySQL创建数据库并设置字符集
    手动配置代理,让终端上网
    mac下镜像飞速安装Homebrew教程
    Python3.8 异步 asyncio
    PHP版本微信支付开发
    PHP对接支付宝支付接口
  • 原文地址:https://www.cnblogs.com/Kylin-xy/p/tijieCF1300.html
Copyright © 2011-2022 走看看