Codeforces 299 B Spongebob and Joke
2015-11-23 19:57
253 查看
B. Spongebob and Joketime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputWhile 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.InputThe 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).OutputPrint "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 3output
Possible 3 2 1input
3 3 1 1 1 1 1 1output
Ambiguityinput
3 3 1 2 1 3 3 3output
ImpossibleNoteIn 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;}
相关文章推荐
- c#多线程__Semaphore
- 20135324家庭作业汇总(2.68、2.70与20135330合作,4.58、6.32与20135332合作)
- 如何修改mtk android 默认拍照size
- Android——广播
- Bootstrap 基本按钮
- 在linux系统下搭建SVN服务器
- 3d打印(5):OpenSCAD软件学习
- 学习笔记
- leetcod_194_transpose_file
- [Android] 浅析总结 AS 中 Gradle 配置运行
- Java线上排查总结
- HDU 2063 过山车(二分图匹配 匈牙利算法)
- 基于Android XML解析与保存的实现
- 文章标题
- 读bootstrap2.3.2有感2
- 实验二20135302 20135325 20135331
- JavaScript DOM编程艺术学习笔记-第一章JavaScript简史
- error LNK2038、error LNK1123
- Winform 自定义TabControl实现浏览器标签
- 第九周 数据结构实现项目--数组和广义表【项目2.2 - 压缩存储的对称矩阵的运算】