题目没有说明同等情况移哪面墙。 就拿样例来说,我移掉4 2 N也可以使得面积最大,满足题意,但题目没有说print any。 被WA的代码:
#include<bits/stdc++.h>
using namespace std;
int f1[5] = { 0,0,1,0,-1 };
int f2[5] = { 0,1,0,-1,0 };
char ch[5] = { '0','E','S','W','N' };
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> m >> n;
vector<vector<vector<int>>>b(n + 1, vector<vector<int>>(m + 1, vector<int>(5)));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
int t;
cin >> t;
bitset<10>p = bitset<10>(t);
if (p[0])b[i][j][3] = 1;
if (p[1])b[i][j][4] = 1;
if (p[2])b[i][j][1] = 1;
if (p[3])b[i][j][2] = 1;
}
}
int idx = 0;
vector<vector<int>>color(n + 1, vector<int>(m + 1));
vector<int>ans(n * m + 1);
function<void(int, int)>dfs = [&](int a, int bb) {
color[a][bb] = idx;
ans[idx]++;
for (int i = 1; i <= 4; i++) {
int x = a + f1[i];
int y = bb + f2[i];
if (x<1 || y<1 || x>n || y>m||b[a][bb][i]||color[x][y])continue;
dfs(x, y);
}
};
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (color[i][j])continue;
idx++;
dfs(i, j);
}
}
int maxn = 0;
for (int i = 1; i <= idx; i++) {
maxn = max(maxn, ans[i]);
}
cout << idx << '\n';
cout << maxn << '\n';
int kase1, kase2, kase3;
function<void(int, int)>solve = [&](int x, int y) {
for (int i = 1; i <= 4; i++) {
int xx = x + f1[i];
int yy = y + f2[i];
if (xx<1 || yy<1 || xx>n || yy>m)continue;
if (color[x][y] != color[xx][yy]) {
if (maxn < ans[color[x][y]] + ans[color[xx][yy]]) {
maxn = ans[color[x][y]] + ans[color[xx][yy]];
kase1 = x; kase2 = y; kase3 = i;
}
}
}
};
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
solve(i, j);
}
}
cout << maxn << '\n';
if (ch[kase3] == 'W') {
cout << kase1 << ' ' << kase2 - 1 << ' ' << 'E' << '\n';
}
else if (ch[kase3] == 'S') {
cout << kase1 + 1 << ' ' << kase2 <<' '<< 'N' << '\n';
}
else cout << kase1 << ' ' << kase2 << ' ' << ch[kase3] << '\n';
return 0;
}