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);
}
posted @ 2025-05-11 11:24  Marinaco  阅读(16)  评论(0)    收藏  举报
//雪花飘落效果