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題還是得先想好狀態和轉移,推倒重來太耗時間了。
以及,先看清題意啊。