Codeforces Global Round 5E(构造,思维)

#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;//因为满足题意的数的最右下方结点最大且与根节点奇偶性相同,所以树的右子树一定有偶数个结点,左子树可以有和右子树一样多的结点,也可以多一个结点
cin>>n;
int x=1;
while(x<=n){
if(n==x||n==x+1){//n等于x或者n等于x+1,x+1即在x的基础上在左子树加了一个结点,始终保持树的左子树结点为偶数,这样一定可以在左子树上+1个结点
cout<<1;
return 0;
}
if(x&1)//如果x是奇数,在x的基础上加一个结点使其作为新树的右子树,再加上x使其作为新树的左子树,再加上一个根节点
x=x+1+x+1;
else//如果x是偶数,在x的基础上加上x使其作为新树的左子树,再加上一个结点作为新树的根节点
x=x+x+1;
}
cout<<0;
return 0;
}

猜你喜欢

转载自www.cnblogs.com/ldudxy/p/11701399.html