蒟蒻81分求调
  • 板块P1331 海战
  • 楼主xiayubin
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/18 16:47
  • 上次更新2024/11/18 19:28:11
查看原帖
蒟蒻81分求调
574326
xiayubin楼主2024/11/18 16:47
#include <bits/stdc++.h>
using namespace std;

const int fx[] = {-1,0,0,1};
const int fy[] = {0,-1,1,0};

char mp[1005][1005];
int r,c;
bool isBadShip = false;
int cnt = 0;

int vis[1005][1005];

void dfs(int x,int y){
	if(vis[x][y]) return;
	vis[x][y] = 1;
	for(int i = 0;i < 4;i++){
		int nx = x + fx[i],ny = y + fy[i];
		if(nx >= 1 && nx <= r && ny >= 1 && ny <= c && mp[nx][ny] == '#'){
			dfs(nx,ny);
			mp[nx][ny] = '.';
		}
	}
}

int main()
{
	cin >> r >> c;
	for(int i = 1;i <= r;i++){
		for(int j = 1;j <= c;j++){
			cin >> mp[i][j];
		}
	}
	for(int i = 2;i <= r - 1;i++){
		for(int j = 2;j <= c - 1;j++){
			if(mp[i-1][j-1] == '.' && mp[i-1][j] == '#' && mp[i][j-1] == '#' && mp[i][j] == '#') isBadShip = true;
			if(mp[i-1][j-1] == '#' && mp[i-1][j] == '.' && mp[i][j-1] == '#' && mp[i][j] == '#') isBadShip = true;
			if(mp[i-1][j-1] == '#' && mp[i-1][j] == '#' && mp[i][j-1] == '.' && mp[i][j] == '#') isBadShip = true;
			if(mp[i-1][j-1] == '#' && mp[i-1][j] == '#' && mp[i][j-1] == '#' && mp[i][j] == '.') isBadShip = true;
			if(isBadShip) {
				cout << "Bad placement.";
				return 0;
			}
		}
	}
	for(int i = 1;i <= r;i++){
		for(int j = 1;j <= c;j++){
			if(mp[i][j] == '#') {
				dfs(i,j);
				cnt++;
			}
		}
	}
	printf("There are %d ships.",cnt);
	return 0;
}
2024/11/18 16:47
加载中...