申请加强数据
  • 板块P1331 海战
  • 楼主AntonyD
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/7 18:37
  • 上次更新2024/8/7 18:44:39
查看原帖
申请加强数据
546456
AntonyD楼主2024/8/7 18:37

没过样例但是AC 代码:

#include <bits/stdc++.h>
using namespace std;
#define MAXN 1005
int r, c, cnt, dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1};
char s[MAXN][MAXN];
bool vis[MAXN][MAXN];
bool chk (int i, int j) {
	int cnt = 0;
	cnt += ((s[i][j] == '#') ? 1 : 0);
	cnt += ((s[i + 1][j] == '#') ? 1 : 0);
	cnt += ((s[i][j + 1] == '#') ? 1 : 0);
	cnt += ((s[i + 1][j + 1] == '#') ? 1 : 0);
	return cnt == 3;
}
void dfs (int x, int y) {
	vis[x][y] = true;
	for (int i = 0; i < 4; i ++) {
		int xx = x + dx[i], yy = y + dy[i];
		if (xx >= 1 && xx <= r && yy >= 1 && yy <= c && !vis[xx][yy] && s[xx][yy] == '#') {
			dfs (xx, yy);
		}
	}
}
int main () {
	cin >> r >> c;
	for (int i = 1; i <= r; i ++) {
		cin >> (s[i] + 1);
	}
	for (int i = 1; i <= r; i ++) {
		for (int j = 1; j <= c; j ++) {
			if (chk (i, j)) return cout << "Bad placement.", 0;
		}
	}
	for (int i = 1; i < r; i ++) {
		for (int j = 1; j < c; j ++) {
			if (!vis[i][j] && s[i][j] == '#') {
				cnt ++;
				dfs (i, j);
			}
		}
	}
	cout << "There are " << cnt << " ships.";
	return 0;
}

就拿样例来说,本应该输出5但是本代码输出3。 而且可以通过本题,故要求加强数据。

2024/8/7 18:37
加载中...