Game on Paper 题解

发布时间 2023-05-24 13:20:58作者: xvl

题目传送门

一道模拟题。

如果每涂一个格子就判断整个矩阵,那时间复杂度显然会炸。

我们每涂一个格子,影响的应该只是以这个格子为中心的 \(3 \times 3\) 矩阵,判断以这些点为中心的话会不会涂出 \(3 \times 3\) 的矩阵即可。

Code

#include <bits/stdc++.h>
#define ll long long
#define INF 1e9
using namespace std;
int n, m;
int dx[9] = {1, 1, 1, -1, -1, -1, 0, 0, 0}; // x 坐标变化
int dy[9] = {0, -1, 1, 0, -1, 1, 0, -1, 1}; // y 坐标变化
bool vis[1005][1005];
bool check(int x, int y) {
    for (int i = 0; i < 9; i++) {
        if (!vis[x + dx[i]][y + dy[i]]) return 0;
    }
    return 1;
}
signed main() {
    ios :: sync_with_stdio(0);
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        vis[x][y] = 1;
        for (int j = 0; j < 9; j++) {
            if (check(x + dx[j], y + dy[j])) {
                cout << i;
                return 0; // 直接结束程序
            }
        }
    }
    cout << -1;
    return 0;
}