QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#238120#7686. The Phantom Menaceucup-team055#WA 1045ms3836kbC++173.3kb2023-11-04 15:50:072023-11-04 15:50:07

Judging History

你现在查看的是最新测评结果

  • [2024-10-08 14:11:03]
  • hack成功,自动添加数据
  • (/hack/941)
  • [2024-10-08 10:05:28]
  • hack成功,自动添加数据
  • (/hack/940)
  • [2024-10-07 19:51:15]
  • hack成功,自动添加数据
  • (/hack/938)
  • [2024-10-07 19:28:01]
  • hack成功,自动添加数据
  • (/hack/937)
  • [2024-10-07 17:16:32]
  • hack成功,自动添加数据
  • (/hack/936)
  • [2024-10-07 16:53:09]
  • hack成功,自动添加数据
  • (/hack/935)
  • [2024-10-07 16:22:17]
  • hack成功,自动添加数据
  • (/hack/934)
  • [2023-11-04 15:50:07]
  • 评测
  • 测评结果:WA
  • 用时:1045ms
  • 内存:3836kb
  • [2023-11-04 15:50:07]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(int)a;i<(int)b;i++)
using ll =long long;
#define all(p) p.begin(),p.end()
using u64=uint64_t;
struct RH{
    static inline const u64 mod=0x1FFF'FFFF'FFFF'FFFF,base=mt19937_64 {random_device{}()}()%mod;
    ll n;
    vector<u64> hash,pow;
    static u64 add(u64 a,u64 b){
        a+=b;
        if(a>=mod) a-=mod;
        return a;
    }
    static u64 mul(u64 a,u64 b){
        auto c=__uint128_t(a)*b;
        return add(c>>61,c&mod);
    }
    RH(const string& s):n(s.size()),hash(n+1),pow(n+1,1){
        for(ll i=0;i<n;i++){
            pow[i+1]=mul(pow[i],base);
            hash[i+1]=add(mul(hash[i],base),s[i]);
        }
    }
    u64 get(ll l,ll r)const {
        return add(hash[r], mod - mul(hash[l], pow[r - l]));
    }
};

vector<int> EW(vector<vector<pair<int,int>>> &gr,int nedges,int src=0){
    int n=gr.size();
    vector<int> D(n),its(n),eu(nedges),ret,s={src},ed;
    D[src]++;
    while(!s.empty()){
        int x=s.back(),y,e,&it=its[x],end=gr[x].size();
        if(it==end){
            if(!ed.empty()){
                e=ed.back();ed.pop_back();
                ret.push_back(e);
            }
            s.pop_back();
            continue;
        }
        tie(y,e)=gr[x][it++];
        if(!eu[e]){
            D[x]--,D[y]++;
            eu[e]=1;
            s.push_back(y);
            ed.push_back(e);
        }
    }
    for(int x:D) if(x<0||ret.size()!=nedges) return {};
    reverse(all(ret));
    return ret;
}

void vec_out(vector<int> v,int add=1){
    rep(i,0,v.size()){
        if(i) cout<<" ";
        cout<<v[i]+add;
    }
    cout<<"\n";
}
void solve(){
    int N,M;
    cin>>N>>M;
    vector<vector<RH>> A(2);
    vector<vector<string>> S(2,vector<string>(N));
    rep(i,0,2) rep(j,0,N){
        cin>>S[i][j];
        RH tmp(S[i][j]);
        A[i].push_back(tmp);
    }
    vector<vector<int>> order(2,vector<int>(N));
    rep(i,0,2){
        rep(j,0,N) order[i][j]=j;
        sort(all(order[i]),[&](int l,int r){
            return S[i][l]<S[i][r];
        });
    }
    bool ok=1;
    rep(i,0,N) if(S[0][order[0][i]]!=S[1][order[1][i]]) ok=0;
    if(ok){
        vec_out(order[0]);
        vec_out(order[1]);
        return;
    }
    using F=pair<u64,bool>;
    rep(x,1,M){
        map<F,int> m;
        vector<vector<pair<int,int>>> G;
        auto f=[&](F val) -> int {
            if(!m.count(val)){
                m[val]=m.size();
                G.push_back({});
            }
            return m[val];
        };
        //0
        rep(i,0,N){
           F X={A[0][i].get(0,M-x),0};
           F Y={A[0][i].get(M-x,M),1};
           int a=f(X),b=f(Y);
           G[a].push_back({b,i});
        }
        //1
        rep(i,0,N){
            F X={A[1][i].get(0,x),1};
            F Y={A[1][i].get(x,M),0};
            int a=f(X),b=f(Y);
            G[a].push_back({b,N+i});
        }
        auto E=EW(G,2*N,0);
        if(E.empty()) continue;
        vector<vector<int>> ans(2);
        rep(i,0,2*N){
            ans[i&1].push_back(E[i]%N);
        }
        vec_out(ans[0]), vec_out(ans[1]);
        return;
    }
    cout<<"-1\n";
}
/*
 2 3 3 abc ghi def bcd efg hia 1 3 abc def
 */

int main(){
    int T;
    cin>>T;
    while(T--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3612kb

input:

2
3 3
abc
ghi
def
bcd
efg
hia
1 3
abc
def

output:

1 3 2
1 2 3
-1

result:

ok 2 cases (2 test cases)

Test #2:

score: 0
Accepted
time: 1045ms
memory: 3836kb

input:

1000000
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
b
b
1 1
a
b
1 1
b
a
1 1
a
a
1 1
...

output:

1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1
-1
1
1
1
1
-1...

result:

ok 1000000 cases (1000000 test cases)

Test #3:

score: -100
Wrong Answer
time: 728ms
memory: 3764kb

input:

500000
1 2
dd
ba
1 2
cd
ba
1 2
bd
ba
1 2
ad
ba
1 2
dc
ba
1 2
cc
ba
1 2
bc
ba
1 2
ac
ba
1 2
db
ba
1 2
cb
ba
1 2
bb
ba
1 2
ab
ba
1 2
da
ba
1 2
ca
ba
1 2
ba
ba
1 2
aa
ba
1 2
dd
aa
1 2
cd
aa
1 2
bd
aa
1 2
ad
aa
1 2
dc
aa
1 2
cc
aa
1 2
bc
aa
1 2
ac
aa
1 2
db
aa
1 2
cb
aa
1 2
bb
aa
1 2
ab
aa
1 2
da
aa
1 2...

output:

-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
1
1
1
1
-1
-1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
-1
-1
1
1
1
1
1
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
-1
-1
-1
-1
-1
1
1
1
1
1
1
1
1
-1
-1
-1
-1
-1
-1
-1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

wrong answer not cyclic isomorphism (test case 9)