为什么我看不懂样例?
查看原帖
为什么我看不懂样例?
142549
hbhz_zcy楼主2020/12/5 18:09

我觉得样例答案应该分别是
4 3
8 9
code

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1600,nx[10]={0,-1,0,1,-1,1,-1,0,1},ny[10]={0,-1,-1,-1,0,0,1,1,1};
bool f[maxn][maxn];//NO 0,0 !!!
int num=0,mans=0,N,M,tim=0;
void tip(){
    for(int i=1;i<=2e7;i++)i=i;
}
int dfs(int x,int y){
//    printf("visit %d %d\n",x,y);
    if(x<1||y<1||x>N||y>M)  return 0;
//    printf("have %d %d\n",x,y);
    int rt=1;
    for(int i=1;i<=8;i++){
//        tip();
        int vx=x+nx[i],vy=y+ny[i];
        if(!f[vx][vy]){
            f[vx][vy]=1;
            rt+=dfs(vx,vy);
        }
    }
//    printf("rt=%d\n",rt);
    return rt;
}
int main(){
    memset(f,0,sizeof(f));
    scanf("%d%d",&N,&M);
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            char c;
            scanf(" %c",&c);
            if(c!='*')  f[i][j]=1;//never read <=> have read
        }
    }
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            if(!f[i][j]){
                f[i][j]=1;
                int rt=dfs(i,j);
                mans=max(rt,mans);
                num++;
//                printf("\n");
            }
//            printf("%d",f[i][j]);
        }
    }
    printf("%d %d\n",num,mans);
    return 0;
}
2020/12/5 18:09
加载中...