ABC#225 C

已知一个 1 0 100 × 7 10^{100}\times7 10100×7的矩阵:
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 . . . . . . . . . . . . . . . . . . . . . ] \left[ \begin{matrix} 1 & 2 &3 & 4 & 5 & 6&7\\ 8 & 9 & 10 & 11 & 12 & 13 & 14 \\ 15 & 16 & 17 & 18 & 19 & 20 & 21 \\ ...&...& ... &...&...&...&... \end{matrix} \right] 1815...2916...31017...41118...51219...61320...71421...

给定一个矩阵,判断该矩阵在上面的矩阵中是否构成一个矩形。

解题思路:
因为矩阵中所有元素均不相同,因此给定一个元素,其在大矩阵中的位置也就唯一确定。
特别的,在本题中,数 x x x的行号为: x + 6 7 \frac{x+6}{7} 7x+6,列号为: ( x − 1 ) m o d    7 + 1 (x-1)\mod 7 + 1 (x1)mod7+1

#include <iostream>
using namespace std;

int main()
{
    
    
    int n, m; 
    cin >> n >> m;
   
    int B[n][m];
    for (int i = 0; i < n; i ++)
        for (int j = 0; j < m; j ++) 
        	cin >> B[i][j];
        	
    int x[n][m], y[n][m];
    for (int i = 0; i < n; i ++)
        for (int j = 0; j < m; j ++)
        {
    
    
            x[i][j] = (B[i][j] + 6) / 7;
            y[i][j] = (B[i][j] - 1) % 7 + 1;
        }

    int flag = 1;
    for (int i = 0; i < n; i ++) //可以合到上面的循环中
        for (int j = 0; j < m; j ++)
        {
    
    
            if (0 < i && x[i][j] != x[i - 1][j] + 1) flag = 0;
            if (0 < j && y[i][j] != y[i][j - 1] + 1) flag = 0;
            if (0 < j && x[i][j] != x[i][j - 1]) flag = 0;
            if (0 < i && y[i][j] != y[i - 1][j]) flag = 0;
            if (!flag)
            {
    
    
            	cout << "No";
            	return 0;
            }
        }
    cout << "Yes";
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Shao_yihao/article/details/121153002
ABC