题目:http://codeforces.com/contest/765/problem/D
题意:
给你n个数f(i)
现在让你构造一个长度为n的g(i),和一个长度为m的h(i),m由你自己定。
要求g(h(x))=x,h(g(x))=f(x)
分析:
代码:
#include<bits/stdc++.h>
using namespace std;
int n, f[101000], q[101000], cnt, p[101000];
int main(){
int i;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&f[i]);
if(!q[f[i]]){
q[f[i]] = ++cnt;
p[cnt] = f[i];
}
}
for(i=1;i<=n;i++){
if(f[f[i]] != f[i]){
printf("-1\n");
return 0;
}
}
printf("%d\n",cnt);
for(i=1;i<=n;i++){
printf("%d ",q[f[i]]);
}
printf("\n");
for(i=1;i<=cnt;i++)printf("%d ",p[i]);
}