牛客多校2021(五)H. Holding Two(构造、思维)

  • 题目:Holding Two

  • 题意:构造一个n * m的01矩阵使得每行、每列、每条斜线任意相邻的三个数不能相同。
  • 解析:每行和每列满足条件实际上还是比较容易的,但是斜线不太容易满足,可以构造一个矩阵(正好错开三个0或三个1):
    1. 1001
    2. 0110
    3. 矩阵变大:
      1. 10011001
      2. 01100110
      3. 10011001
      4. 01100110
  • 代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int a[N][N];
int n, m;
int p[2][4]{
1, 0, 0, 1,
0, 1, 1, 0
};

int main()
{
    cin >> n >> m;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            a[i][j] = p[i % 2][j % 4];
        } 
    }
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            cout << a[i][j];
        cout << endl;
    }
    return 0;
}

上一篇:[LeetCode] 653. Two Sum IV - Input is a BST


下一篇:学习笔记228—Two-way ANOVA using SPSS