时/空限制:1s / 64MB
题解 :
- 按照步数枚举
#include <iostream>
using namespace std;
const int N = 1e3 + 10;
typedef pair<int, int> PII;
int g[N][N];
PII pos[N * N];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
int main() {
int t;
cin >> t;
for (int c = 1; c <= t; ++ c) {
int n;
cin >> n;
for (int i = 0; i < n; ++ i) {
for (int j = 0; j < n; ++ j) {
cin >> g[i][j];
pos[g[i][j]] = {i, j};
}
}
int mx = 0, ans;
for (int i = 1; i <= n * n; ) {
int tmp = i;
while (i <= n * n) {
bool ok = false;
int x = pos[i].first, y = pos[i].second;
for (int d = 0; d < 4; ++ d) {
int nx = x + dx[d], ny = y + dy[d];
if (nx < 0 || nx >= n || ny < 0 || ny >= n) continue;
if (g[nx][ny] == g[x][y] + 1) {
ok = true;
break;
}
}
i ++ ;
if (!ok) break;
}
if (mx < i - tmp) {
mx = i - tmp;
ans = tmp;
}
}
printf("Case #%d: %d %d\n", c, ans, mx);
}
}