为什么和某些AC题解写的差不多,但是WA
查看原帖
为什么和某些AC题解写的差不多,但是WA
1074084
asd890123楼主2024/3/8 17:03
#include <stdio.h>

int n,m,ans=0;
int f[102 * 102];
char a[102][102];

int find(int x);
void init();
void search();
void print();
void final();
void clear(int x,int y);

int main(){
    
    init();
    search();
    final();
    print();
    
    return 0;
}

void init(){
    
    scanf("%d%d",&n,&m);
    for (int i=1,getchar();i<=n;i++)
        for (int j=1;j<=m;j++)
            scanf("%c",&a[i][j]);
    
}

void print(){
    
    printf("%d",ans);
    
}

int find(int x){
    
    if (f[x]==x) return x;
    return find(f[x]);
    
}

void clear(int x,int y){
    
    int fx=find(x),fy=find(y);
    
    if(fx == x){
        
        f[x] = fy;
        return;
        
    }
    f[fy] = fx;
    
}

void search(){
    
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            if(a[i][j]=='W'){
                
                int pail=(i-1)*m+j;
                
                if (a[i][j+1]=='W') clear(pail,pail+1);
                if (a[i+1][j-1]=='W') clear(pail,pail+m-1);
                if (a[i+1][j]=='W') clear(pail,pail+m);
                if (a[i+1][j+1]=='W') clear(pail,pail+m+1);
                
            }
    
}

void final(){
    
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            if (a[i][j] == 'W')
            	ans += (f[(i-1)*m+j]==(i-1)*m+j);
    
}
2024/3/8 17:03
加载中...