60求调
查看原帖
60求调
1414080
wzy_ok楼主2025/6/14 08:01

为什么只有60分呢?

#include <bits/stdc++.h>
using namespace std;

int n, m, ans;
int x[5] = {0, -1, 1, 0, 0};
int y[5] = {-1, 0, 0, 1, 0};
char c[1010][1010];
queue<int> a, b;

int main() {
	cin >> n >> m;
	for (int i = 2; i <= n + 1; i ++) {
		for (int j = 2; j <= m + 1; j ++) {
			cin >> c[i][j];
			if (c[i][j] == '#') {
				a.push(i);
				b.push(j);
			}
		}
	}
	
	int s = 0;
	for (int i = 2; i <= n + 1; i ++) {
		for (int j = 2; j <= m + 1; j ++) {
			if (c[i][j] == '.') {
				bool flag = true;
				for (int k = 0; k < 5; k ++) {
					if (c[i + x[k]][j + y[k]] == '#') {
						flag = false;
						break;
					}
				}
				s += flag;
			}
		}
	}
	
	while (a.size()) {
		c[a.front()][b.front()] = '.';
		int f = 1;
		for (int i = 0; i < 4; i ++) {
			bool flag = true;
			for (int j = 0; j < 5; j ++) {
				if (c[a.front() + x[i] + x[j]][b.front() + y[i] + y[j]] == '#') {
					flag = false;
					break;
				}
			}
			f += flag;
		}
		ans = max(ans, f);
		c[a.front()][b.front()] = '#';
		a.pop(), b.pop();
	}
	
//	cout << s << endl;
//	cout << ans << endl;
	cout << s + ans << endl;
	
	return 0;
}
2025/6/14 08:01
加载中...