码迷,mamicode.com
首页 > 其他好文 > 详细

codeforce Hello 2018 913 ABCDEG SOL

时间:2018-01-15 22:36:35      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:c++   [1]   这一   bit   tar   add   turn   printf   its   

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

标签:c++   [1]   这一   bit   tar   add   turn   printf   its   

原文地址:https://www.cnblogs.com/rrsb/p/8289771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!