网站表单及商品列表详情模板,中国国家商标注册网官网,个人网站做电影资源链接犯法吗,网站建设需要会一些啥http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id282385 就是一个人最开始有一串数a1 a2 ... am 他的熊孩子队友用一组函数f1 f2 ... fn 以及bi fai 把串A换成了串B 现在告诉你B和F#xff0c;让你把A换回来#xff0c;能换回来输出A#xff0c;换回来可能有…http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id282385 就是一个人最开始有一串数a1 a2 ... am 他的熊孩子队友用一组函数f1 f2 ... fn 以及bi fai 把串A换成了串B 现在告诉你B和F让你把A换回来能换回来输出A换回来可能有多重情况输出ambiguity不可能换回来输出impossible ai其实就是f的一个定位给出一个f(x)求x 所以出现多解的情况就是对于一个b中的值f有超过一个以上的位置上的值等于bi 出现不可能的情况就是对于一个bi没有f中的值与之对应 因为最后输出的就是x这个位置所以直接在输入的时候把f翻转一下f[i]的值表示f在i这个值的时候的定位之后直接输出即可 1 #includebits/stdc.h2 using namespace std;3 4 int f[100005];5 int b[100005];6 int a[100005];7 int n, m;8 bool Ambiguity;9 bool Impossible;
10 bool ambi[100005];
11
12 int main(){
13 while(~scanf(%d%d, n, m)){
14 Ambiguity false;
15 Impossible false;
16 memset(ambi, 0, sizeof(ambi));
17 memset(f, 0, sizeof(f));
18 memset(b, 0, sizeof(b));
19 memset(a, 0, sizeof(a));
20 for(int i 1; i n; i){
21 int pos;
22 scanf(%d, pos);
23 if(f[pos] 0) f[pos] i;
24 else{
25 ambi[pos] true;
26 }
27 }
28 for(int i 1; i m; i){
29 scanf(%d, b[i]);
30 }
31
32 //solve()
33 for(int i 1; i m; i){
34 if(f[ b[i] ] ! 0 ambi[ b[i] ] ! true) a[i] f[ b[i] ];
35 else if(f[ b[i] ] 0){
36 Impossible true;
37 }
38 else{
39 Ambiguity true;
40 }
41 }
42
43 if(Impossible){
44 printf(Impossible\n);
45 }
46 else if(Ambiguity){
47 printf(Ambiguity\n);
48 }
49 else{
50 printf(Possible\n);
51 for(int i 1; i m; i){
52 printf(%d, a[i]);
53 if(i ! m) printf( );
54 }
55 printf(\n);
56 }
57 }
58
59 return 0;
60 } 转载于:https://www.cnblogs.com/miaowTracy/p/5336192.html