1. 程式人生 > >codeforce Hello 2018 913 ABCDEG SOL

codeforce Hello 2018 913 ABCDEG SOL

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>
using
namespace 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,int
y){ 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