Luogu P1331バトル

解決

実際には、この問題は非常に暴力的である
キーは、各正方形の処理のためである(まだの処理要件に比較的薄い
ので、検討する必要がなく、いくつかの変形があり、左上から右下へ:私たちは明確な検索を持っているためにまず
限り、我々はすべての創設者をチェックするように、ライン上で完全ではありません
時間の最大ノードを更新

#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 2147483647
int R,C,Ans,s,ex,ey;
char a[1010][1010];
int u[]={1,-1,0,0};
int v[]={0,0,1,-1};
void dfs(int x,int y){
  for(int i=0;i<4;i++){
    int xx=x+u[i],yy=y+v[i];
    if(xx>0&&xx<=R&&yy>0&&yy<=C&&a[xx][yy]=='#'){
      s++;
      if(xx>ex||yy>ey)ex=xx,ey=yy;
      a[xx][yy]='.';
      dfs(xx,yy);
    }
  }
}
int main(){
  cin>>R>>C;
  for(int i=1;i<=R;i++)
    for(int j=1;j<=C;j++)
      cin>>a[i][j];
  for(int i=1;i<=R;i++)
    for(int j=1;j<=C;j++)
      if(a[i][j]=='#'){
    s=1;
    ex=i;
    ey=j;
    Ans++;
    a[i][j]='.';
    dfs(i,j);
    if(((ex-i+1)*(ey-j+1))!=s){
      cout<<"Bad placement."<<endl;
      return 0;
    }
      }
  printf("There are %d ships.\n",Ans);
  return 0;
}

おすすめ

転載: www.cnblogs.com/KingBenQi/p/12289662.html