• TYWZOJ 礼品配对包装 题解


    题目描述

    爱与愁大神在这家目标店买了 2 x 2x 2x 份礼物,打算分给班级同学。其中有 x x x 份黑礼品, x x x 份白礼品, 2 x + 2 2x+2 2x+2 个空礼盒。一开始这 2 x 2x 2x 份礼品排成一行放在左边 2 x 2x 2x 个空礼盒上,黑礼品在左边,白礼品在右边,最右边有两个空礼盒。现在爱与愁大神要把这 2 x 2x 2x 个礼品移成黑白相间的一排。他正无聊着,于是定了个规矩:每次必须同时移动相邻的两个礼品,颜色不限,可以左移也可以右移到空礼盒上去,但不能调换两个礼品的左右位置。每次移动必须跳过若干个礼盒(不能平移),最后弄成黑白相间的一行礼品。这个规矩却难倒了自己,你能帮爱与愁大神出出主意吗?

    输入格式

    输入一个整数 x x x

    输出格式

    输出有若干行:第 i i i 行为步骤 i − 1 i-1 i1 1 1 1 代表黑礼品, 2 2 2 代表白礼品, 0 0 0 代表空礼盒),具体输出格式见样例。注意 Step 0 \text{Step 0} Step 0 不计入总数。最后 1 1 1 行为总数。

    样例

    样例输入

    7
    
    • 1

    样例输出

    Step 0:1111111222222200
    Step 1:1111110022222212
    Step 2:1111112222220012
    Step 3:1111100222221212
    Step 4:1111122222001212
    Step 5:1111002222121212
    Step 6:1111222200121212
    Step 7:1110022212121212
    Step 8:1112122002121212
    Step 9:1002122112121212
    Step 10:1212120012121212
    Step 11:0012121212121212
    11
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    数据范围与提示

    1 ≤ x ≤ 50 1 \le x \le 50 1x50

    思路与部分实现

    完整代码

    #include 
    using namespace std;
    int n, Step = -1, S;
    char ans[103];
    void print() {
        printf("Step %d:", ++Step);
        for (int i = 1; i <= n + n + 2; i++)
    		printf("%c", ans[i]);
        printf("\n");
    }
    void move(int l) { 
    	ans[S] = ans[l], ans[l] = '0',
    	ans[S + 1] = ans[l + 1], ans[l + 1] = '0';
    	S = l, print();
    }
    void present(int l) {
        if (l == 4)
            move(4), move(8), move(2), move(7), move(1);
        else
            move(l), move(l + l - 1), present(l - 1);
    }
    int main() {
        scanf("%d", &n);
        S = n + n + 1;
        for (int i = 1; i <= n; i++)
    		ans[i] = '1';
        for (int i = n + 1; i <= n + n; i++)
    		ans[i] = '2';
        ans[n + n + 1] = '0', ans[n + n + 2] = '0';
    	print(), present(n);
        printf("%d", Step);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33




  • 相关阅读:
    三菱PLC若想实现以太网无线通讯,需要具备哪些条件?
    RS-485通信
    JVM的三种常见GC:Minor GC、Major GC与Full GC
    神经压缩文本训练:提升大型语言模型效率的新方法
    项目经理和产品经理,谁更难?
    开源之夏 2023 | Databend 社区项目总结与分享
    多线程应用的测试与调试
    验证C++中 cout 输出情况的小程序
    芯片产业管理和营销指北(3)—— 赢得客户
    Kernel Modules Versus Applications
  • 原文地址:https://blog.csdn.net/LOSER_World/article/details/134095007