Codeforces 299 B Spongebob and Joke

简介:
B. Spongebob and Joke
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

While Patrick was gone shopping, Spongebob decided to play a little trick on his friend. The naughty Sponge browsed through Patrick's personal stuff and found a sequence a1, a2, ..., am of length m, consisting of integers from 1 to n, not necessarily distinct. Then he picked some sequence f1, f2, ..., fn of length n and for each number ai got number bi = fai. To finish the prank he erased the initial sequence ai.

It's hard to express how sad Patrick was when he returned home from shopping! We will just say that Spongebob immediately got really sorry about what he has done and he is now trying to restore the original sequence. Help him do this or determine that this is impossible.

Input

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 100 000) — the lengths of sequences fi and bi respectively.

The second line contains n integers, determining sequence f1, f2, ..., fn (1 ≤ fi ≤ n).

The last line contains m integers, determining sequence b1, b2, ..., bm (1 ≤ bi ≤ n).

Output

Print "Possible" if there is exactly one sequence ai, such that bi = fai for all i from 1 to m. Then print m integers a1, a2, ..., am.

If there are multiple suitable sequences ai, print "Ambiguity".

If Spongebob has made a mistake in his calculations and no suitable sequence ai exists, print "Impossible".

Sample test(s)
input
3 3
3 2 1
1 2 3
output
Possible
3 2 1 
input
3 3
1 1 1
1 1 1
output
Ambiguity
input
3 3
1 2 1
3 3 3
output
Impossible
Note

In the first sample 3 is replaced by 1 and vice versa, while 2 never changes. The answer exists and is unique.

In the second sample all numbers are replaced by 1, so it is impossible to unambiguously restore the original sequence.

In the third sample fi ≠ 3 for all i, so no sequence ai transforms into such bi and we can say for sure that Spongebob has made a mistake.

题目大意:
给你n个f[i],m个b[i],然后问你能不能找到m个a[i],使得b[i]=f[a[i]],然后输出a[i],如果有多种可能的话输出
Ambiguity
,没有的话输出
Impossible
 
       
解体思路:	
 
       
 
       
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;

#define MM(a) memset(a,0,sizeof(a))

typedef long long LL;
typedef unsigned long long ULL;
const int maxn = 1e5+5;
const int mod = 1e9+7;
const double eps = 1e-8;
const int INF = 0x3f3f3f3f;
LL gcd(LL a, LL b)
{
    if(b == 0)
        return a;
    return gcd(b, a%b);
}
int b[maxn],f[maxn];
int vis[maxn];
int data[maxn];
int cnt[maxn];
int main()
{
    int n, m;
    while(~scanf("%d%d",&n,&m))
    {
        MM(vis);
        MM(cnt);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&b[i]);
            vis[b[i]] = i;
            cnt[b[i]]++;
        }
        for(int i=1; i<=m; i++)
            scanf("%d",&f[i]);
        bool ok = false, yes = false, flag = false;
        for(int i=1,j=1; i<=m; i++)
        {
            if(vis[f[i]] == 0)
            {
                ok = true;
                break;
            }
            if(cnt[f[i]] > 1)
                yes = true;
            else
                data[j++] = vis[f[i]];
        }
        if(ok)
            puts("Impossible");
        else
        {
            if(yes)
                puts("Ambiguity");
            else
            {
                puts("Possible");
                for(int i=1; i<m; i++)
                    cout<<data[i]<<" ";
                cout<<data[m]<<endl;
            }
        }
    }
    return 0;
}


目录
相关文章
codeforces 322 B Ciel and Flowers
有红绿蓝三种颜色的画,每种拿三朵可以组成一束花,或者各拿一朵组成花束,告诉你每种花的数目,求出可能组成最多的花束。 如果你的代码过不了,考虑一下 8 8 9这种组合。 因为数据量很大,我的思想就是局部和总体采用不同的策略。
52 0
codeforces 312
A. Whose sentence is it?
50 0
|
6月前
codeforces
【6月更文挑战第10天】
32 0
codeforces 304A. Pythagorean Theorem II
给你一个n,计算出1 ≤ a ≤ b ≤ c ≤ n.使得由abc构成的三角形满足勾股定理,c为斜边。 没有简单的方法,直接爆力,但是要注意,有些abc满足勾股定理的表达式,但不一定是三角形,所以要判断一下,根据三角形三边的性质,两边之和大于第三边,两边之差小于第三边。
66 0
C - Rumor CodeForces - 893C
C - Rumor CodeForces - 893C
92 0
|
人工智能
Codeforces 777C Alyona and Spreadsheet
C. Alyona and Spreadsheet time limit per test:1 second memory limit per test:256 megabytes input:standard input output:standard ...
1160 0
Codeforces 591B Rebranding
B. Rebranding time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output ...
856 0