91分,求帮忙
  • 板块P1331 海战
  • 楼主QcpyWcpyQ
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/11 22:21
  • 上次更新2023/11/4 04:01:51
查看原帖
91分,求帮忙
450861
QcpyWcpyQ楼主2021/10/11 22:21

RTRT,第二个测试点总是过不了

代码如下

#include<cstdio>
#include<iostream>
using namespace std;

inline int read(){
	int f=1,s=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return s*f;
}

#define re register

const int N=1e3+5,dx[4]={-1,0,0,1},dy[4]={0,-1,1,0};
int n,m,sum;
char c[N][N];

inline bool pd(int x,int y){
	int ans=0;
	if(c[x][y]=='#')ans++;
	if(c[x+1][y]=='#')ans++;
	if(c[x][y+1]=='#')ans++;
	if(c[x+1][y+1]=='#')ans++;
	return ans==3?false:true;
}

inline void dfs(int x,int y){
	for(re int i=0;i<4;i++){
        int X=x+dx[i],Y=y+dy[i];
        if(X<1||Y>n||X<1||Y>m)
			continue;
        if(c[X][Y]=='#'){
            c[X][Y]='.';
            dfs(X,Y);
        }
    }
}

int main(){
	n=read(),m=read();
	for(re int i=1;i<=n;i++)
		for(re int j=1;j<=m;j++)
			cin>>c[i][j];
	for(re int i=1;i<n;i++)
		for(re int j=1;j<m;j++)
			if(!pd(i,j)){
				printf("Bad placement.");
				return 0;
			}
	for(re int i=1;i<=n;i++)
		for(re int j=1;j<=m;j++)
			if(c[i][j]=='#')
				dfs(i,j),sum++;
	printf("There are %d ships.",sum);
    return 0;
}
2021/10/11 22:21
加载中...