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;
}
时间: 2024-10-24 23:07:19

Codeforces 299 B Spongebob and Joke的相关文章

Codeforces Round #299 (Div. 2) A. Tavas and Nafas

题目链接:http://codeforces.com/problemset/problem/535/A #include <iostream> #include <string> using namespace std; int main() { string s1[10]={"zero","one","two","three","four","five",&qu

Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (数学、dp)

C. Little Elephant and LCM time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output The Little Elephant loves the LCM (least common multiple) operation of a non-empty set of positive integers. The

Codeforces B. Taxi 算法题解

简单总结题意: 有一个数组,数组中的数值不会大于4,即只能是1,2,3,4,要把这些数值装进一个容量最大为4的容器里面,使得所用到这样的容器的个数最小. 经测试数据很大,会有10万个数据,所以这里我并不用排序数据,而是使用counting sort的思想,根据特定的数据优化,使得题解时间复杂度为O(n). 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/ 程序如下: #include <iostream>

CodeForces 233B Non-square Equation

链接: http://codeforces.com/problemset/problem/233/B 题目: B. Non-square Equation time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Let's consider equation: x2+s(x)·x-n=0, where x,n are positive

CodeForces:200C: Football Championship

地址链接: CF:  http://codeforces.com/problemset/problem/200/C HUST Virtual Judge: http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=28923 题目: C. Football Championship time limit per test 2 seconds memory limit per test 256 megabytes input s

Codeforces Round #205 (Div. 2) / 353C Find Maximum (贪心)

Valera has array a, consisting of n integers a0,a1,...,an-1, and function f(x), taking an integer from 0 to 2n-1 as its single argument. Value f(x) is calculated by formula , where value bit(i) equals one if the binary representation of number xconta

Codeforces Round #201 (Div. 1) / 346A Alice and Bob:数论&amp;amp;想法题

A. Alice and Bob http://codeforces.com/problemset/problem/346/A time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output It is so boring in the summer holiday, isn't it? So Alice and Bob have inven

UVa 299 Train Swapping:冒泡排序的次数

299 - Train Swapping Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=235 At an old railway station, you may still encounter one of the last remaining ``tr

算法:CodeForces #196(Div. 2) 337D Book of Evil(树形dp)

题意 给一棵n个结点的树,任意两个节点的距离是指连接两点的最短的边数 在树上的某个结点 有一个"恶魔之书",这本书会让距离它d以内的节点都受到影响 已知有m个节点收到了影响,问最多有几 个结点可能放着"恶魔之书"? 思路 要判断某个点是不是放着书,就要判断这个点的周围d距离以 内是否包含所有受影响的m节点 而如果某个节点距离最远的那个受影响节点的距离是L,如果L <= d,那 么说明所有受影响的m节点都在d以内,就可判断这个点可能放着书 那么,我们只要能够求出