73求助,2,9,10WA
  • 板块P1331 海战
  • 楼主16_lln
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/21 18:59
  • 上次更新2024/3/21 20:55:52
查看原帖
73求助,2,9,10WA
1112758
16_lln楼主2024/3/21 18:59
#include <bits/stdc++.h>
using namespace std;
int over;//检测器 
int r/*行*/,c/*列*/,ans=0;
char ph[1005][1005];
void pd(int x,int y){
	int s/*竖*/,h/*横*/,sum=0;
	for(h=x;;h++){
		if(ph[x][h]=='.'||h>r) break;
	}
	h--;//船阵左方边长 
	for(s=y;;s++){
		if(ph[y][s]=='.'||s>c) break;
	}
	s--;//船阵上方边长 
	for(int i=x;i<=h;i++){
		for(int j=y;ph[i][j]=='#';j++) sum++;
		if(sum!=s-y+1){
			cout<<"Bad placement."<<endl;
			over=1;
			return;
		}
		sum=0;
	} 
	for(int i=y;i<=s;i++){
		for(int j=x;ph[j][i]=='#';j++) sum++;
		if(sum!=h-x+1){
			cout<<"Bad placement."<<endl;
			over=1;
			return;
		}
		sum=0;
	}
	for(int i=x;i<=h;i++){
		for(int j=y;j<=s;j++){
			ph[i][j]='*';//排除"NO"后删除船阵 
		}
	}
	ans++; 
}
int main(){
	cin>>r>>c;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			cin>>ph[i][j];//输入地图 
		}
	} 
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(ph[i][j]=='#') pd(i,j);//一旦发现船体就开始搜索船阵 
			if(over==1) return 0;//无解则退出 
		}
	} 
	cout<<"There are "<<ans<<" ships."<<endl; 
	return 0;
} 
2024/3/21 18:59
加载中...