Codeforces Round#500 Div.2 翻车记
Posted gloid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:没看
最后rank348。连着几场都在这附近感觉自己也确实就这么弱了啊。
dp题还是得先想好状态和转移,推倒重来太耗时间了。
以及,先看清题意啊。
以上是关于Codeforces Round#500 Div.2 翻车记的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #500 (Div. 2) BC
Codeforces Round#500 Div.2 翻车记