蒟蒻求调 WA on 10
查看原帖
蒟蒻求调 WA on 10
834895
ganqihao楼主2025/6/17 11:08
#include <bits/stdc++.h>
using namespace std;

const int N=2e3+10;
const int M=N*N;
bool vis[N][N];
bool p[N][N];
int n;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
pair<int,int> ans[N];
int tail;
pair<int,int> q[M];
void dfs(int x,int y){
    vis[x][y]=1,ans[tail].first++;
    for(int i=0;i<4;i++){
        int fx=x+dx[i],fy=y+dy[i];
        if(fx<0||fy<0||fx>n+1||fy>n+1) continue;
        if(vis[fx][fy]) continue;
        if(p[fx][fy]==1) dfs(fx,fy);
        else ans[tail].second++;
    }
}
void bfs(int x,int y){
    int front=1,qtail=1;
    q[qtail]={x,y};
    vis[x][y]=1;
    while(front<=qtail){
        auto t=q[front];
        int gx=t.first,gy=t.second;
        ans[tail].first++;
        front++;
        for(int i=0;i<4;i++){
            int fx=gx+dx[i],fy=gy+dy[i];
            if(fx<0||fy<0||fx>n+1||fy>n+1) continue;
            if(vis[fx][fy]) continue;
            if(p[fx][fy]==1) qtail++,q[qtail]={fx,fy},vis[fx][fy]=1;
            else ans[tail].second++;
        }
    }
}
bool cmp(pair<int,int> A,pair<int,int> B){
    if(A.first!=B.first) return A.first>B.first;
    else return A.second<B.second;
}
int main(){
    //freopen("a.in","r",stdin);
    scanf("%d",&n);
    for (int i = 1; i <= n; i++) {
        string s;
        cin>>s;
        for (int j = 0; j < n; j++) {
            if(s[j]=='#')
                p[i][j+1]=1;
        }
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(p[i][j]&&!vis[i][j])
                tail++,dfs(i,j);
    stable_sort(ans+1,ans+1+tail,cmp);
    //for(int i=1;i<=tail;i++) printf("%d %d\n",ans[i].first,ans[i].second);
    // for(int i=0;i<=n+1;i++){
    //     for(int j=0;j<=n+1;j++)printf("%3d",vis[i][j]);
    //     puts("");
    // }
    //cout<<tail<<" ";
    printf("%d %d\n",ans[1].first,ans[1].second);
}


BFS 与 DFS 均WA on 10,输出500001 0

2025/6/17 11:08
加载中...