zoukankan      html  css  js  c++  java
  • Codeforces Round#500 Div.2 翻车记

      A:签到

    #include<iostream> 
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int read()
    {
        int x=0,f=1;char c=getchar();
        while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
        while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
        return x*f;
    }
    #define N 55
    int n,x,y;
    int main()
    {
        n=read();
        for (int i=1;i<=n;i++) x+=read();
        for (int i=1;i<=n;i++) y+=read();
        if (x>=y) cout<<"Yes";else cout<<"No";
        return 0;
    }

      B:用不上位运算的各种性质,开个桶记一下能不能对应上就好。

    #include<iostream> 
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int read()
    {
        int x=0,f=1;char c=getchar();
        while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
        while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
        return x*f;
    }
    #define N 100010
    int n,x,a[N],f[N<<1];
    int main()
    {
        n=read(),x=read();
        for (int i=1;i<=n;i++) f[a[i]=read()]++;
        for (int i=1;i<=n;i++) if (f[a[i]]>1) {cout<<0;return 0;}
        for (int i=1;i<=n;i++) if (f[x&a[i]]>(a[i]==(x&a[i]))) {cout<<1;return 0;}
        memset(f,0,sizeof(f));
        for (int i=1;i<=n;i++) f[a[i]&x]++;
        for (int i=1;i<=n;i++) if (f[x&a[i]]>1) {cout<<2;return 0;}
        cout<<-1;
        return 0;
    }

      C:容易发现横坐标或纵坐标选取连续的一段最优。枚举横/纵坐标选取的起始位置就好。

    #include<iostream> 
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int read()
    {
        int x=0,f=1;char c=getchar();
        while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
        while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
        return x*f;
    }
    #define N 100010
    int n,a[N<<1];
    int main()
    {
        n=read();
        for (int i=1;i<=n*2;i++) a[i]=read();
        sort(a+1,a+n*2+1);
        long long ans=1ll*(a[n]-a[1])*(a[n*2]-a[n+1]);
        for (int i=2;i<=n;i++) ans=min(ans,1ll*(a[n*2]-a[1])*(a[n+i-1]-a[i]));
        cout<<ans;
        return 0;
    }

      貌似写这三题时达到的最高排名是十几名,有点小膨胀2333

      然后看D,完了没啥思路啊。赶紧跳E。

      咦这不是随便dp一下就好吗。码码码。

      啊好像不太对……咦这样改一下状态不就好了吗。码码码。

      啊好像不太对……咦这样改一下状态不就好了吗。码码码。

      啊好像不太对……咦这样改一下状态不就好了吗。码码码。

      ………………

      好像突然离结束只有半个小时了。期间从十几名一路掉到接近三百。

      终于找到一个比较靠谱的做法了。写起来感觉特别优美啊。

      码码码码完了。测样例。咦怎么挂了?

      调调调。还是不对啊?

      不是这样例怎么回事啊?

      哦我看错题了啊。

      瞬间翻车。还剩不到二十分钟,脑补一下这个题还是能做的,但根本码不完了啊。

      于是就弃疗了。不过看起来还是不会掉rating的。但还是好惨啊。

      D:冷静一下会发现,把行列各自看成点之后就是问图里有多少个连通块。

      E:后来发现还是想麻烦了,f[i][j]表示前i座山留j座(不考虑第i+1座的影响)花费的最少时间,加一维01状态记一下i留不留,转移时从f[i-1]和f[i-2]转移过来,讨论一下

      F:没看

      最后rank340,rating涨12。连着几场都在这附近感觉自己也确实就这么弱了啊。

      dp题还是得先想好状态和转移,推倒重来太耗时间了。

      以及,先看清题意啊。

  • 相关阅读:
    洛谷 P1908 逆序对(树状数组解法)
    洛谷 P1908 逆序对(归并排序解法)
    洛谷 P3368 【模板】树状数组 2(区间修改点查询)
    POJ 2833 The Average(优先队列)
    POJ 2255 Tree Recoveryw(二叉树)
    洛谷 P1540 机器翻译(队列)
    POJ 1686 Lazy Math Instructor(栈)
    队列中取最大值操作
    相邻元素差的绝对值都是1,在这样的数组中找目标元素
    双栈队列实现快速获取队列最大值最小值
  • 原文地址:https://www.cnblogs.com/Gloid/p/9392532.html
Copyright © 2011-2022 走看看