QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#239801#7686. The Phantom Menaceucup-team197#WA 274ms161716kbC++142.9kb2023-11-04 23:28:272023-11-04 23:28:27

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 23:28:27]
  • 评测
  • 测评结果:WA
  • 用时:274ms
  • 内存:161716kb
  • [2023-11-04 23:28:27]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fi first
#define se second
ll n,m;
string a[1000005],b[1000005];
const ll b1=2977,m1=1e9+7,b2=9277,m2=998244353;
void add(pair<ll,ll>&x,char c){
	x.fi=(x.fi*b1+c)%m1;
	x.se=(x.se*b2+c)%m2;
}
pair<int,int>g[1000005],h[1000005];

unordered_map<ll,ll>mp,mp1,mp2;
bool check0(){
	mp.clear();
	int sz=0;
	
	for(int i=1; i<=n ;i++){
		pair<ll,ll>hsh={0LL,0LL};
		for(auto c:a[i]) add(hsh,c);
		if(mp[hsh.fi*m2+hsh.se]==0) mp[hsh.fi*m2+hsh.se]=++sz;
		g[i]={mp[hsh.fi*m2+hsh.se],sz};
	}
	for(int i=1; i<=n ;i++){
		pair<ll,ll>hsh={0LL,0LL};
		for(auto c:b[i]) add(hsh,c);
		if(mp[hsh.fi*m2+hsh.se]==0) mp[hsh.fi*m2+hsh.se]=++sz;
		h[i]={mp[hsh.fi*m2+hsh.se],sz};
	}
	sort(g+1,g+n+1);sort(h+1,h+n+1);
	for(int i=1; i<=n ;i++) if(g[i].fi!=h[i].fi) return false;
	for(int i=1; i<=n ;i++) cout << g[i].se << ' ';
	cout << '\n';
	for(int i=1; i<=n ;i++) cout << h[i].se << ' ';
	cout << '\n';
	return true;
}

const int N=4e6+5;
vector<pair<int,int> >adj[N];
int in[N],out[N];
vector<int>ans;
void dfs(int id){
	//if(adj[id].empty()) return;
	while(!adj[id].empty()){
		auto c=adj[id].back();adj[id].pop_back();
		dfs(c.se);
		ans.push_back(c.fi);	
	}
}
void adde(int u,int v,int w){
	//cout << "Adde " << u << ' ' << v << ' ' << w << endl;
	adj[u].push_back({w,v});
	out[u]++;in[v]++;
}
bool check(int p){
	//cout << "Check " << p << endl;
	mp1.clear();mp2.clear();
	int sz=0;
	for(int i=1; i<=4*n ;i++){
		adj[i].clear();
		in[i]=0;out[i]=0;
	}
	for(int i=1; i<=n ;i++){
		pair<ll,ll>hsh={0LL,0LL};
		for(int j=0; j<p ;j++) add(hsh,a[i][j]);
		if(mp1[hsh.fi*m2+hsh.se]==0) mp1[hsh.fi*m2+hsh.se]=++sz;
		int v1=mp1[hsh.fi*m2+hsh.se];
		
		hsh={0LL,0LL};
		for(int j=p; j<m ;j++) add(hsh,a[i][j]);
		if(mp2[hsh.fi*m2+hsh.se]==0) mp2[hsh.fi*m2+hsh.se]=++sz;
		int v2=mp2[hsh.fi*m2+hsh.se];
		adde(v1,v2,i);
	}
	for(int i=1; i<=n ;i++){
		pair<ll,ll>hsh={0LL,0LL};
		for(int j=m-p; j<m ;j++) add(hsh,b[i][j]);
		if(mp1[hsh.fi*m2+hsh.se]==0) mp1[hsh.fi*m2+hsh.se]=++sz;
		int v1=mp1[hsh.fi*m2+hsh.se];
		
		hsh={0LL,0LL};
		for(int j=0; j<m-p ;j++) add(hsh,b[i][j]);
		if(mp2[hsh.fi*m2+hsh.se]==0) mp2[hsh.fi*m2+hsh.se]=++sz;
		int v2=mp2[hsh.fi*m2+hsh.se];
		adde(v2,v1,i+n);
	}
	for(int i=1; i<=sz ;i++) if(in[i]!=out[i]) return false;
	ans.clear();
	dfs(1);
	if(ans.size()!=2*n) return false;
	reverse(ans.begin(),ans.end());
	for(int i=0; i<2*n ;i+=2) cout << ans[i] << ' ';
	cout << '\n';
	for(int i=1; i<2*n ;i+=2) cout << ans[i]-n << ' ';
	cout << '\n';
	return true;
}
void solve(){
	cin >> n >> m;
	for(int i=1; i<=n ;i++) cin >> a[i];
	for(int i=1; i<=n ;i++) cin >> b[i];
	if(check0()) return;
	for(int j=1; j<m ;j++){
		if(check(j)) return;
	}
	cout << "-1\n";
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);
	int t;cin >> t;while(t--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 24ms
memory: 160508kb

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: 274ms
memory: 160300kb

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
...

result:

ok 1000000 cases (1000000 test cases)

Test #3:

score: 0
Accepted
time: 195ms
memory: 161716kb

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
...

result:

ok 500000 cases (500000 test cases)

Test #4:

score: -100
Wrong Answer
time: 184ms
memory: 160976kb

input:

500000
2 1
d
d
b
a
2 1
c
d
b
a
2 1
b
d
b
a
2 1
a
d
b
a
2 1
d
c
b
a
2 1
c
c
b
a
2 1
b
c
b
a
2 1
a
c
b
a
2 1
d
b
b
a
2 1
c
b
b
a
2 1
b
b
b
a
2 1
a
b
b
a
2 1
d
a
b
a
2 1
c
a
b
a
2 1
b
a
b
a
2 1
a
a
b
a
2 1
d
d
a
a
2 1
c
d
a
a
2 1
b
d
a
a
2 1
a
d
a
a
2 1
d
c
a
a
2 1
c
c
a
a
2 1
b
c
a
a
2 1
a
c
a
a
2 1
d...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 2 
2 2 
-1
-1
1 2 
2 2 
-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 2 
2 2 
-1
-1
1 2 
2 2 
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 2 
2 2 
-1
-1
-1
-1
-1
1 2 
2 2 
-1
-1
-1
-1
-1
-1
-1
-1
-...

result:

wrong answer q is not permutation (test case 12)