Codeforces Round #332 (Div. 2) B. Spongebob and Joke
来源:互联网 发布:js encodeuri导入 编辑:程序博客网 时间:2024/05/16 03:56
题目链接:http://codeforces.com/contest/599/problem/B
题目大意:给定你一个数组a1,a2,……,am,里面的包含的是1-n的整数(可以重复),再给定一个数组f1,f2,……,fn,然后规定数组b符合b(i)=f(ai)。a数组被擦掉了,现在给定你f数组和b数组,让你判断a数组的情况。n,m(1<=m,n<=100000)。 第二行n个数表示的是f数组(1<=f(i)<=n)。第三行m个数表示的是b数组(1<=b(i)<=n)。 如果a数组存在且唯一,要求输出Possible,站一行。接下来一行输出a1,a2,……,am用空格隔开,站一行。如果a数组存在但不是唯一存在,要求输出Ambiguity。如果a数组不存在要求输出Impossible。
解题思路:首先这道题基本很多人都会认为判断f数组是否重复就是判断是否是唯一的 其实不然 这里不应该这么判断 应该去判断b数组在f数组中是唯一的 反之则说明不是唯一的 开个数组c c[f[i]]=i c[b[i]]则是a数组 这里我们要判断c[b[i]]是否等于0 因为范围是在1 到 10W之间 不包括0 初始化为0 如果它等于0 就说明它找不到一个与之相匹配的 说明不存在
//Time:108 ms //Memory: 4720 KB #include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#include <map>#include <cmath>#include <queue>#include <string>#include <vector>#include <set>#include <stack>using namespace std;const int maxn=100005;bool flag1,flag2;int n,m;int f[maxn],b[maxn],a[maxn],c[maxn];map<int,int> mp;int main(){ while(~scanf("%d %d",&n,&m)) { flag1=true;flag2=true; memset(a,0,sizeof(a)); memset(c,0,sizeof(c)); for(int i=1;i<=n;i++) { scanf("%d",&f[i]); c[f[i]]=i;//为了求a数组 mp[f[i]]++; } for(int i=1;i<=m;i++) { scanf("%d",&b[i]); a[i]=c[b[i]]; if(mp[b[i]]>1)//不唯一 出现多次 flag2=false; if(a[i]==0)//不存在的条件 flag1=false; } if(flag1) { if(!flag2) puts("Ambiguity"); else { puts("Possible"); for(int i=1;i<=m;i++) printf("%d%c",a[i],i==m?'\n':' '); } } else { puts("Impossible"); } mp.clear(); } return 0;}
1 0
- Codeforces Round #332 (Div. 2) B. Spongebob and Joke
- Codeforces Round #332 (Div. 2) B. Spongebob and Joke
- Codeforces Round #332 (Div. 2) B. Spongebob and Joke
- Codeforces Round #332 (Div. 2) B. Spongebob and Joke
- Codeforces Round #332 (Div. 2) B. Spongebob and Joke
- Codeforces Round #332 (Div. 2)_B. Spongebob and Joke
- Codeforces Round #332 (Div. 2)B. Spongebob and Joke(模拟)
- Codeforces Round #332 (Div. 2) 599B Spongebob and Joke(STL)
- Codeforces Round #332 (Div. 2) B. Spongebob and Joke(水题,构造)
- Codeforces Round #332 (Div. 2) B. Spongebob an Joke (水)
- 【Codeforces Round 332 (Div 2)B】【扭转题意 位置映射】Spongebob and Joke 给b[]中的每个数找f[]中的位置
- Codeforces #332 B. Spongebob and Joke (思路)
- Codeforces 599B Spongebob and Joke 【水题】
- Codeforces 299 B Spongebob and Joke
- codeforces 599B Spongebob and Joke
- Codeforces 599 B Spongebob and Joke
- CodeForces 599B Spongebob and Joke
- CodeForces 599B A - Spongebob and Joke
- 2016年最新iOS面试题精选总结 --- 项目问题(六)
- 关于子网掩码
- BGRABitmap图像操作5:使用层、遮罩
- C/C++ 开源库及示例代码
- HTML4.0
- Codeforces Round #332 (Div. 2) B. Spongebob and Joke
- 2016年最新iOS面试题精选总结 --- 人事面试问题(七)
- windows下为apache配置https
- CentOS7 安装 Chrome Stable
- freemarker介绍
- 通过ADOQuery调用SQLServer的存储过程
- Tomcat和Apache部署XML,JSON文件
- Mybatis与SpringMVC整合 源码分析
- 【华为OJ】统计大写字母个数