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.


思路:

这是一个7:43分的早晨,关于这个提交了15遍最后才过了的题,我想写点什么。

首先想先谈谈自己对CF的认识,由于不让c++和c的格式混用(刚才发现是编译器的问题),至少错了5、6次,教训是立马他妈的去学怎么用cin和cout

好了,学完回来了

然后再说说这个坑爹的题吧,首先理解题意大概就花了能有1h。。。

先说说自己理解后现在的完全抽象版:

就是有两个数列,让你对第二个数列中每个数找到在第一个数列中的位置,如果有哪一项是找不到的,用某个值给他标记出来,那么这个test就是Impossible

如果有两个值找到的pos是相同的,那么这个test的ans就是Ambiguity的

如果没什么问题,即第2个数列的所有元素都能找到唯一且存在的值,那么就输出Possible然后分别输出第二个数列每个数在第一个数列中的位置

再总结几个get的小技巧:

(1)获取某个值在一个数组中的位置,可以让value做为数组下标,然后记录数组的序号。

  这个时候如果遇到序号重叠的问题,就要看看之后用到pos的量是否需要这个值

(2)判断一个数组中是否有重复的元素以及数组中各个元素的数量问题,可以专门创建一个数组来表示先前被判断数组元素的数量关系

(3)有n(n大于等于3)个要判断的可能性,可以设置n-1个bool变量,然后一次判断每种可能性


#include <iostream>
#include <cstring>
using namespace std; int main()
{
int n,m;
int f[];
int b[];
int a[];
int pos[];
int num[];
while(cin>>n>>m)
{ /*
错误一:不应该存在的代码
if(n < m) {
printf("Impossible\n");
continue;
}
*/
memset(pos,,sizeof(pos));
/*错误二:num数组忘记清零*/
memset(num,,sizeof(num));
int Im = ;
int Am = ;
/*错误三:输入的突然中止*/
for(int i = ;i <= n;i++){
cin>>f[i];
pos[f[i]] = i;
num[f[i]]++;
}
for(int i = ;i <= m;i++) {
int t;
cin>>b[i];
if(num[b[i]] > ) Am = ;
a[i] = pos[b[i]];
if(a[i] == ) Im = ;
} if(Im) {
cout<<"Impossible"<<endl;
continue;
}
else if(Am) {
cout<<"Ambiguity"<<endl;
continue;
}
else {
cout<<"Possible"<<endl;
for(int i = ;i <= m-;i++)
cout<<a[i]<<' ';
cout<<a[m]<<endl;
}
}
return ;
}

CF-599B - Spongebob and Joke的更多相关文章

  1. Codeforces 599B. Spongebob and Joke 模拟

    B. Spongebob and Joke time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  2. codeforce 599B Spongebob and Joke

    一道水题WA那么多发,也是醉了.f看成函数的话,其实就是判断一下反函数存不存在. 坑点,只能在定义域内判断,也就是只判断b[i].没扫一遍前不能确定Impossible. #include<bi ...

  3. CodeForces 599B Spongebob and Joke

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  4. Codeforces Round #332 (Div. 2)B. Spongebob and Joke

    B. Spongebob and Joke time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  5. Codeforces Round #332 (Div. 2) B. Spongebob and Joke 水题

    B. Spongebob and Joke Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/599 ...

  6. Codeforces Round #332 (Div. 2)_B. Spongebob and Joke

    B. Spongebob and Joke time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  7. Codeforces Round #332 (Div. 2) B. Spongebob and Joke 模拟

    B. Spongebob and Joke     While Patrick was gone shopping, Spongebob decided to play a little trick ...

  8. Codeforces Round #332 (Div. 二) B. Spongebob and Joke

    Description While Patrick was gone shopping, Spongebob decided to play a little trick on his friend. ...

  9. CF 599D Spongebob and Squares(数学)

    题目链接:http://codeforces.com/problemset/problem/599/D 题意:定义F(n,m)为n行m列的矩阵中方阵的个数,比如3行5列的矩阵,3x3的方阵有3个.2x ...

随机推荐

  1. 提高VS2010/VS2012编译速度

    除了合理的划分模块,减少link的时间外,充分利用多核编译也很重要. VS2010/2012都可以用多核编译,需要同时设置如下两个参数: Enable Minimal Rebuild  Propert ...

  2. CCDictionary&CCArray执行retain()重要点

    CCDictionary也需要执行retain(),否则则跟CCArray,返回则释放对象. 在Lua中,忘记了retain(),导致一些出现gCCDictionary:objectForKey(ke ...

  3. Myeclipse中点(.)不出来方法或者属性?

  4. 在公网上布署Web Api的时候,不能调用,返回404

    在internet上布署web API做的站点时,发现不能调用web api的任何action, 返回404. 经过很多的努力,也找不到原因,环境是win server 2008, IIS 75. n ...

  5. 一些YY

    都说苦痛难熬,哪里想过苦痛也是良药. 现在想起什么就说什么吧,反正自己还很弱,没有身高,没有长相,家里不富,学习也是渣,,, 大一的时候自己也很努力的去学习,去实践,但是成绩不理想,我就在想也许时间还 ...

  6. AppDomain.CurrentDomain.GetAssemblies()

    AppDomain.CurrentDomain.GetAssemblies() ,获取已加载到此应用程序域的执行上下文中的程序集 解释地址 从微软的解释也可以得知,这个方法只能获取已经加载到此应用程序 ...

  7. 修改登录linux之后显示的默认文件夹目录

    命令如下: ll -a vim .bash_profile 最后一行加上cd 需要显示的文件夹

  8. Jquery.Sorttable 桌面拖拽自定义

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  9. android-Activity的执行流程

    概述 The following diagram shows the important state paths of an Activity. The square rectangles repre ...

  10. Oracle 优化——位图、函数等索引介绍

    一.位图索引 我将使用一个例子,来描述位图索引的存储,并分析它的优点. Table :Loans 放贷信息 ID userId 行业投向 币种 证件类型 还本付息方式 状态 1 1 农业 人民币 身份 ...