1 条题解

  • 1
    @ 2025-4-5 20:42:55

    题解

    只要是奇数步,就不能停留在原位,要是把整个迷宫划分成国际棋盘的黑白格,那么奇数步必然只能转移到异色格上, 注意到这点而且题目是specialjudgespecial judge ,只需注意随时保持还没被染色的在一块大联通域里面就行了,(要是被孤立了那么玩家就不能再走,魔术师就算是没有完成魔术,要是多个区块就不知道玩家到底在哪个区块了,这样无法消除到只有一个含一块的区块) 这里为了保证这一点我使用的是从外向里,每次推一层的方法,假设出发点(0,0)(0,0)是白格(计算中使用了二维坐标,结果转化为in+j+1i*n+j+1) 对于里面的第ii层,先消去上一层i1i-1层未涂色的白格,再消去ii层可以消去的白格(相邻的黑格都有两个及以上个没有被消去的白格相邻),最后新建一个操作,消去ii层的所有黑格(这时候ii层的白格不会受影响,因为还有i+1i+1层)

    标程

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        int t = 0;
        int i, j;  // 提前声明循环变量
        
        for (i = 1; i <= n; i++) {
            cout << 2 * n + 1 + t * 2 << " ";
            t++;
            for (j = 0; j < i; j++) {
                cout << i + (n - 1) * j << " ";
            }
            cout << endl;
        }
        
        for (i = 2; i < n; i++) {
            cout << 2 * n + 1 + t * 2 << " ";
            t++;
            for (j = 0; j <= (n - i); j++) {
                cout << i * n + (n - 1) * j << " ";
            }
            cout << endl;
        }
        
        return 0;
    }
    
    
    • 1

    信息

    ID
    711
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者