codeforce Hello 2018 913 ABCDEG SOL
阿新 • • 發佈:2018-01-15
span line amp 一位 clas scanf sin ref read
A:
我們發現2^n增長很快,n>30時便沒有貢獻了。
#include<bits/stdc++.h> using namespace std; int n,m; int main () { scanf("%d%d",&n,&m); if (n>29) {printf("%d\n",m);return 0;} int l=1<<n; l--; printf("%d\n",m&l); }
B
我們dfs一邊就好了。
#include<bits/stdc++.h> usingnamespace std; #define sight(c) (‘0‘<=c&&c<=‘9‘) #define N 10007 inline void read(int &x){ static char c; for (c=getchar();!sight(c);c=getchar()); for (x=0;sight(c);c=getchar())x=x*10+c-48; } int n,fa,son[N],tot,tog; int fall[N],net[N],head[N]; inline void add(int x,inty){ fall[++tot]=y; net[tot]=head[x]; head[x]=tot; } bool dfs(int x){ int r=0; for (int i=head[x];i;i=net[i]) { if (!head[fall[i]]) r++; else if (!dfs(fall[i])) return 0; } if (r<3) return 0; return 1; } int main () { read(n); for (int i=2;i<=n;i++) read(fa),add(fa,i); puts(dfs(1)?"Yes":"No"); }
C :
我們采取貪心的策略,我們先用A[i]去更新其後面的數據:
舉個例子 a[1]=10 ,a[2]=100,那麽我們發現a[2]永遠比a[1] 劣,那麽我們用a[1]的兩倍更新a[2].
我們再從高位向下做,我們發現對於每一個ai,(更新過的),我們要麽取一個(L在這一位上有1),或是再多取一個,從而不取之後的數據,采取這種策略O(N)掃一遍就好了。
D :sol點這裏 (整理在一起太長了。)
E :sol點這裏
G:sol點這裏
codeforce Hello 2018 913 ABCDEG SOL