C. Cats
题目链接:https://codeforces.com/gym/102875/problem/C
题意:
有n个房子,高度为1~20的猫的高度有任意个。
约束条件:1.高度相同的猫不能相邻
2.高度相同的猫中间要有比它小的猫
求把所有房子填满的构造方案
思路:
神秘构造
1
2 1 2
3 2 3 1 3 2 3
长度依次是:1,3,7....
观察发现最长序列为根节点为1,叶子节点为20的完全二叉树的中序遍历
最长为2^20-1
递归求解即可
int cnt=0;
int k=0;
int n;
void f(int depth){
if(depth==cnt+1)return;
if(k==n)return;
f(depth+1);
if(k==n)return;
cout<<depth<<' ';
k++;
if(k==n)return;
f(depth+1);
}
void solve(){
cin>>n;
for(int i=0;i<25;i++){
if((1<<i)-1>=n){
cnt=i;break;
}
}
f(1);
}

浙公网安备 33010602011771号