首页 > 其他 > 详细

BestCoder Round #61 (div.2) C.Subtrees dfs

时间:2015-11-05 00:31:05      阅读:240      评论:0      收藏:0      [点我收藏+]

Subtrees

 
 
问题描述
一棵有N个节点的完全二叉树,问有多少种子树所包含的节点数量不同。
输入描述
输入有多组数据,不超过1000组.
每组数据输入一行包含一个整数N.(1\leq N\leq {10}^{18})(1N10?18??)
输出描述
对于每组数据输出一行,表示不同节点数的子树有多少种.
输入样例
5
6
7
8
输出样例
3
4
3
5

题解: 完全二叉树,。。。dfs下去分点就好了
技术分享
///1085422276
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
inline ll read()
{
    ll x=0,f=1;
    char ch=getchar();
    while(ch<0||ch>9)
    {
        if(ch==-)f=-1;
        ch=getchar();
    }
    while(ch>=0&&ch<=9)
    {
        x=x*10+ch-0;
        ch=getchar();
    }
    return x*f;
}
//****************************************
#define maxn 100000+5
#define mod 1000000007

ll n;
set<ll > s;
void dfs(ll x){
   if(x==0)return ;
   if(s.count(x)){
       return ;
   }
   s.insert(x);
   x--;
   dfs(x/2);
   dfs(x/2+x%2);
}
int main(){
    while(scanf("%I64d",&n)!=EOF){
    s.clear();
    dfs(n);
    cout<<s.size()<<endl;
    }

   return 0;
}
代码

 



BestCoder Round #61 (div.2) C.Subtrees dfs

原文:http://www.cnblogs.com/zxhl/p/4937706.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!