求调随机化
查看原帖
求调随机化
777756
UFOI楼主2023/11/28 21:08
#include<bits/stdc++.h>
using namespace std;
int n,c[11];
string a[11][11];
map<char,int>mp;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];
    for(int i=2;i<=n;i++) c[i]=i-2;
    while((double)clock()/CLOCKS_PER_SEC<=0.99){
        random_shuffle(c+2,c+1+n);
        for(int i=2;i<=n;i++) mp[a[i][1][0]]=c[i];
        for(int i=2;i<=n;i++){
            for(int j=2;j<=n;j++){
                int cnt=1;
                for(int k=0;k<a[i][j].size();k++) cnt*=mp[a[i][j][k]];
                if((mp[a[i][1][0]]+mp[a[1][j][0]])%(n-1)!=cnt%(n-1)) goto T1;
            }
        }
        for(int i=2;i<=n;i++) cout<<a[i][1]<<"="<<c[i]<<" ";
        cout<<endl<<n-1;
        return 0;
        T1:;
    }
    cout<<"ERROR!";
}

第二个数据错了:

4
+ M N P
M N MP M
N MP MN N
P M N P

输出:

M=2 N=1 P=0 
3
2023/11/28 21:08
加载中...