zoukankan      html  css  js  c++  java
  • 洛谷-P5461 赦免战俘

    洛谷-P5461 赦免战俘

    原题链接:https://www.luogu.com.cn/problem/P5461


    题目背景

    借助反作弊系统,一些在月赛有抄袭作弊行为的选手被抓出来了!

    题目描述

    现有 (2^n imes 2^n (nle10)) 名作弊者站成一个正方形方阵等候 kkksc03 的发落。kkksc03 决定赦免一些作弊者。他将正方形矩阵均分为 4 个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免,剩下 3 个小矩阵中,每一个矩阵继续分为 4 个更小的矩阵,然后通过同样的方式赦免作弊者……直到矩阵无法再分下去为止。所有没有被赦免的作弊者都将被处以棕名处罚。

    给出 (n),请输出每名作弊者的命运,其中 0 代表被赦免,1 代表不被赦免。

    输入格式

    一个整数 (n)

    输出格式

    (2^n×2^n) 的 01 矩阵,代表每个人是否被赦免。数字之间有一个空格。

    输入输出样例

    输入 #1

    3
    

    输出 #1

    0 0 0 0 0 0 0 1
    0 0 0 0 0 0 1 1
    0 0 0 0 0 1 0 1
    0 0 0 0 1 1 1 1
    0 0 0 1 0 0 0 1
    0 0 1 1 0 0 1 1
    0 1 0 1 0 1 0 1
    1 1 1 1 1 1 1 1
    

    C++代码

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int a[1025][1025];
    
    void solve(int x, int y, int m) {
        if (m == 0)
            return ;
        for (int i=0; i<m/2; ++i)
            for (int j=0; j<m/2; ++j)
                a[x+i][y+j] = 0;
        solve(x+m/2, y, m/2);
        solve(x, y+m/2, m/2);
        solve(x+m/2, y+m/2, m/2);
    }
    
    int main() {
        int n, len;
        cin >> n;
        len = pow(2, n);
        for (int i=0; i<len; ++i)
            for (int j=0; j<len; ++j)
                a[i][j] = 1;
        solve(0, 0, len);
        for (int i=0; i<len; ++i) {
            for (int j=0; j<len; ++j)
                cout << a[i][j] << ' ';
            cout << '
    ';
        }
        return 0;
    }
    
  • 相关阅读:
    SQL执行效率1
    php经典算法(转载)
    linux自用命令
    vim基本命令
    xampp安装
    BUU-rsa
    z3约束器学习笔记
    面试前夕oi挣扎式复习
    bss上的格式化字符串漏洞
    一、汇编
  • 原文地址:https://www.cnblogs.com/yuzec/p/13408028.html
Copyright © 2011-2022 走看看