「有趣的(纯)找性质题」[Global Round #5] Balanced Binary Search Trees
发现这个 balanced 是个很强的约束,可以观察到在第一个条件下根节点只能是
有了这些性质,可以发现对于每个
证明可以考虑假设有两个均满足条件的树 perfect balanced ,所以可以知道「不同构」只能是把某个点的某个子树的一个点移到另一颗子树里,这要满足两个子树 size 之前相差
于是就可以直接从
#include <cstdio>
int n ;
int ans ;
int main(){
ans = 1 ;
scanf("%d", &n) ;
while (ans <= n){
if (ans == n || ans == n - 1) return puts("1"), 0 ;
if (ans & 1) (ans <<= 1) += 2 ; else (ans <<= 1) += 1 ;
}
return puts("0"), 0 ;
}