一道模拟题。
如果每涂一个格子就判断整个矩阵,那时间复杂度显然会炸。
我们每涂一个格子,影响的应该只是以这个格子为中心的 \(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;
}
标签:格子,int,题解,矩阵,vis,Game,Paper,dx,dy
From: https://www.cnblogs.com/xvl-/p/17428020.html