問題B:エリア
制限時間:1秒メモリ制限:128メガバイト
[提出] [状態]
タイトル説明
0の一方と図の組成、プログラム「によって算出領域を」パターンに囲まれました。統計計算エリア数が数0の閉曲線に囲まれています。
入力
0から、の組成を示す
出力
の数面積を
サンプル入力コピー
000000000は
0000 ** 000
000 00 00
00 000 00
000 000 ***
000000000
サンプル出力コピー
。5
#include <iostream>
#include <cstdio>
#include <queue>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int M = 100005;
int n,m;
char mp[100][100];
bool vis[100][100];
int nex[4][2] = {0,1,0,-1,1,0,-1,0};
void dfs(int x,int y){
for(int i=0; i<4; i++){
int xx = x + nex[i][0];
int yy = y + nex[i][1];
if(xx>=0 && xx<n && yy>=0 && yy<m && !vis[xx][yy] && mp[xx][yy]=='0'){
vis[xx][yy]=1;
dfs(xx,yy);
}
}
}
int main()
{
n=0;
while(~scanf("%s",mp[n])){
n++;
}
m = strlen(mp[0]);
// cout << n << m;
memset(vis,0,sizeof(vis));
for(int i=0; i<n; i++)
for(int j=0; j<m; j++){
if((i==0 || i==n-1 || j==0 || j==m-1) && mp[i][j]=='0'){
vis[i][j] = 1;
dfs(i,j);
}
}
int ans = 0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(mp[i][j]=='0' && !vis[i][j]) ans++;
cout << ans << endl;
return 0;
}
IF((I = = 0 || I = = N-1 || J = = 0 || J = = M-1)&& MP [I] [J] = = '0')
アイデア:一番外側の円の四辺を周りに掃引するように、最終集計がタグ付けされていません
注:与えられたいくつかの奇数行はありませんが、あなたは自問する必要があります