Submission #101994


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define foreach(it,X) for(__typeof(X.begin()) it=X.begin();it!=X.end();it++)
#define fir first
#define sec second
//#define foreachM(it,X) for(map<int,int>::iterator it=X.begin();it!=X.end();it++)
#define vi vector<int>
#define pb push_back
#define sz(x) ((int)(x).size())

typedef long long ll;

ll N,K,b[100010];
int used[100010];
map<int,int> M;
set<int> P;
map<int,int> K2;
map<int,ll> K3;
vector<vector<int> > seq;
int ans[100010];

int main(){
	cin>>N>>K;
	rep(i,N)cin>>b[i],b[i]--;
	rep(i,N)if(!used[i]){
		int cur=i;
		int len=0;
		vi v;
		while(!used[cur]){
			used[cur]=1;
			v.pb(cur);
			len++;
			cur=b[cur];
		}
		M[len]++;
		seq.pb(v);
	}
	foreach(it,M){
		int L=it->fir;
		for(int i=2;i*i<=L;i++)if(L%i==0){
			P.insert(i);
			while(L%i==0)L/=i;
		}
		if(L>1)P.insert(L);
	}
	foreach(it,P){
		ll x=K;
		K3[*it]=1;
		while(x%(*it)==0){
			K2[*it]++;
			K3[*it]*=*it;
			x/=*it;
		}
	}
	int combine=0;
	foreach(it,M){
		ll len=it->fir,num=it->sec;
		foreach(it2,P){
			ll p=*it2;
			if(len % p == 0){
				if(num % K3[p] != 0){
					return cout<<"Impossible"<<endl,0;
				}
				if(K3[p] != 1) combine=1;
			}
		}
	}
	if(combine)return cout<<"Ambiguous"<<endl,0;
	
	if(/*sz(K2)!=0*/K>=2){
		ll minP = -1;//= K2.begin() -> fir;
		for(int i=2;i<100005;i++)if(K % i == 0){
			minP = i;
			break;
		}
		if(minP == -1)goto end;
		foreach(it,M){
			ll num=it->sec;
			if(num >= minP)return cout<<"Ambiguous"<<endl,0;
		}
	}
	end:;
	
	foreach(it,seq){
		vi v=*it;
		vi w(sz(v));
		ll cur=0;
		rep(i,sz(v)){
			w[cur] = v[i];
			cur += K;
			cur %= sz(v);
		}
		rep(i,sz(w)){
			if(i<sz(w)-1) ans[w[i]] = w[i+1];
			else ans[w[i]] = w[0];
		}
	}
	
	rep(i,N)cout<<ans[i]+1<<(i==N-1 ? "\n":" ");
}

Submission Info

Submission Time
Task H - Shuffling Machine
User wakaba
Language C++ (GCC 4.4.7)
Score 100
Code Size 1882 Byte
Status AC
Exec Time 93 ms
Memory 4000 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 48
Set Name Test Cases
All 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 5, 6, 7, 8, 9
Case Name Status Exec Time Memory
1 AC 22 ms 708 KB
10 AC 26 ms 1048 KB
11 AC 50 ms 1832 KB
12 AC 23 ms 800 KB
13 AC 57 ms 2328 KB
14 AC 69 ms 2836 KB
15 AC 92 ms 3992 KB
16 AC 72 ms 2848 KB
17 AC 71 ms 2776 KB
18 AC 71 ms 2788 KB
19 AC 87 ms 3736 KB
2 AC 21 ms 792 KB
20 AC 91 ms 3688 KB
21 AC 72 ms 2340 KB
22 AC 90 ms 3360 KB
23 AC 70 ms 2344 KB
24 AC 70 ms 2336 KB
25 AC 89 ms 3828 KB
26 AC 74 ms 2764 KB
27 AC 71 ms 2844 KB
28 AC 93 ms 4000 KB
29 AC 73 ms 2900 KB
3 AC 22 ms 796 KB
30 AC 71 ms 2904 KB
31 AC 91 ms 3744 KB
32 AC 73 ms 2716 KB
33 AC 73 ms 2732 KB
34 AC 73 ms 2772 KB
35 AC 21 ms 804 KB
36 AC 21 ms 932 KB
37 AC 22 ms 848 KB
38 AC 21 ms 804 KB
39 AC 20 ms 796 KB
4 AC 20 ms 748 KB
40 AC 21 ms 796 KB
41 AC 21 ms 748 KB
42 AC 22 ms 808 KB
43 AC 23 ms 808 KB
44 AC 22 ms 928 KB
45 AC 24 ms 808 KB
46 AC 22 ms 804 KB
47 AC 22 ms 932 KB
48 AC 22 ms 800 KB
5 AC 22 ms 808 KB
6 AC 21 ms 928 KB
7 AC 30 ms 1068 KB
8 AC 22 ms 936 KB
9 AC 22 ms 928 KB