点击打开链接
///AC
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<cstring>
#include<string>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 100005
int a[maxn];
int f[maxn];
int b[maxn];
vector<int> Q[maxn];
int main()
{
int n=0,m=0;
while(cin>>n>>m){
for(int i=0;i<n;i++)
scanf("%d",&f[i]);
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
for(int i=0;i<n;i++)
Q[f[i]].push_back(i);
int flag = 0;
for(int i=0;i<m;i++){
if(Q[b[i]].size()==0)
return puts("Impossible");
if(Q[b[i]].size()>1)
flag = 1;
}
if(flag == 1)
return puts("Ambiguity");
puts("Possible");
for(int i=0;i<m;i++)
printf("%d ",Q[b[i]][0]+1);
printf("\n");
}
return 0;
}
///TLE
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
int Arr1[100005],Arr2[100005],Arr3[100005],n,m=0,visit[100005];
void solv()
{
int i=0,j=0,flag=0,num=1;
memset(visit,0,sizeof(visit));
for(j=1;j<=m;j++){
flag=0;
for(i=1;i<=n;i++){
if(Arr1[i]==Arr2[j]) flag=1;
}
if(!flag) {
printf("Impossible\n");
return;
}
}
for(j=1;j<=m;j++){
for(i=1;i<=n;i++){
if(Arr1[i]==Arr2[j]&&visit[Arr1[i]]==0){
Arr3[num]=i;
visit[Arr1[i]]=1; ///表示这个元素已经有过一次行为记录了
num++;
}
else if(Arr1[i]==Arr2[j]&&visit[Arr1[i]]==1){
printf("Ambiguity\n");
return;
}
}
}
printf("Possible\n");
for(i=1;i<num;i++){///这里是num,不是n。这个错误好难找
printf("%d ",Arr3[i]);
}
printf("\n");
}
int main()
{
int i=0,j=0;
while(cin>>n>>m){
for(i=1;i<=n;i++) scanf("%d",&Arr1[i]);
for(i=1;i<=m;i++) scanf("%d",&Arr2[i]);
solv();
}
return 0;
}