有一个自造数据过不去
查看原帖
有一个自造数据过不去
795784
zxh923楼主2024/6/28 15:44

代码:

#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define x first
#define y second
#define N 105
#define M N*N
#define eps 1e-8
using namespace std;
int n,m,top,cnt;
char g[N][N];
pii q[M];
double hash_val[30];
double get_dist(pii a,pii b){
    double dx=a.x-b.x,dy=a.y-b.y;
    return sqrt(dx*dx+dy*dy);
}
double get_center_dist(){
    double sum=0;
    double sx=0,sy=0;
    for(int i=0;i<top;i++){
        sx+=q[i].x;
        sy+=q[i].y;
    }
    sx/=top;sy/=top;
    for(int i=0;i<top;i++){
        double dx=q[i].x-sx,dy=q[i].y-sy;
        sum+=sqrt(dx*dx+dy*dy);
    }
    return sum;
}
double get_hash(){
    double sum=0;
    for(int i=0;i<top;i++){
        for(int j=0;j<i;j++){
            sum+=get_dist(q[i],q[j]);
        }
    }
    return sum+get_center_dist();
}
char get_id(){
    double key=get_hash();
    for(int i=0;i<cnt;i++){
        if(abs(hash_val[i]-key)<eps){
            return 'a'+i;
        }
    }
    hash_val[cnt++]=key;
    return 'a'+cnt-1;
}
void dfs(int a,int b){
    q[top++]={a,b};
    g[a][b]=0;
    for(int x=a-1;x<=a+1;x++){
        for(int y=b-1;y<=b+1;y++){
            if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]=='1'){
                dfs(x,y);
            }
        }
    }
}
signed main(){
    cin>>m>>n;
    for(int i=0;i<n;i++){
        cin>>g[i];
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(g[i][j]=='1'){
                top=0;
                dfs(i,j);
                char id=get_id();
                for(int k=0;k<top;k++){
                    g[q[k].x][q[k].y]=id;
                }
            }
        }
    }
    for(int i=0;i<n;i++){
        cout<<g[i]<<'\n';
    }
    return 0;
}

数据:

7
5
1100110
0100010
1100011
1110111
0010001

正确输出:

aa00bb0
0a000b0
aa000bb
aaa0bbb
00a000b

我输出:

aa00aa0
0a000a0
aa000aa
aaa0aaa
00a000a
2024/6/28 15:44
加载中...