CodeForces-203B 题解

题目传送门

一道模拟题……

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

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

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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;
}