46分,测试点本机上能过,但就没有分?!
  • 板块P1331 海战
  • 楼主zero_two02
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/29 18:39
  • 上次更新2023/11/4 12:44:57
查看原帖
46分,测试点本机上能过,但就没有分?!
229778
zero_two02楼主2021/7/29 18:39
#include <bits/stdc++.h>
using namespace std;
int w;
int c;
char ch;
int ans;
int r;
int l;
bool p[1004][1004];
bool p1[1005][1004];
bool p2[1004][1004];
bool n[1004][1004];
int s;
void dfs(int a,int b)
{
	p[a][b]=1;
	if(p[a+1][b]==0&&n[a+1][b]==1) {
		s++;
		dfs(a+1,b);
	}
	if(p[a-1][b]==0&&n[a-1][b]==1) {
		s++;
		dfs(a-1,b);
	}
	if(p[a][b+1]==0&&n[a][b+1]==1) {
		s++;
		dfs(a,b+1);
	}
	if(p[a][b-1]==0&&n[a][b-1]==1) {
		s++;
		dfs(a,b-1);
	}
}
void dfs_l(int a,int b)
{
	p1[a][b]=1;
	if(p1[a][b+1]==0&&n[a][b+1]==1) {
		l++;
		dfs_l(a,b+1);
	}
	if(p1[a][b-1]==0&&n[a][b-1]==1) {
		l++;
		dfs_l(a,b-1);
	}
}
void dfs_r(int a,int b)
{
	if(p2[a+1][b]==0&&n[a+1][b]==1) {
		p2[a+1][b]=1;
		r++;
		dfs_r(a+1,b);
	}
	if(p2[a-1][b]==0&&n[a-1][b]==1) {
		p2[a-1][b]=1;
		r++;
		dfs_r(a-1,b);
	}
}
int main()
{
	cin>>w>>c;
	getchar();
	for(int i=1;i<=w;i++){
		for(int j=1;j<=c;j++){
			ch=getchar();
			if(ch=='.') n[i][j]=0;
			else n[i][j]=1;
		}
		getchar();
	}
	for(int i=1;i<=w;i++){
		for(int j=1;j<=c;j++){
			if(p[i][j]==0&&n[i][j]==1) { 
				s=1;r=1;l=1;p[i][j]=1;p1[i][j]=1;p2[i][j]=1;
				dfs(i,j);
				dfs_l(i,j);
				dfs_r(i,j);
				if(s==r*l) ans++;
				else{
					
					cout<<"Bad placement.";
					return 0;
				}
			}
		}
	
	}
	cout<<"There are "<<ans<<" ships.";
	return 0;
}
2021/7/29 18:39
加载中...