zoukankan      html  css  js  c++  java
  • 【模拟】【codeforces】599B Spongebob and Joke

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=282385

    就是一个人最开始有一串数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 #include<bits/stdc++.h>
     2 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
    ");
    45         }
    46         else if(Ambiguity){
    47             printf("Ambiguity
    ");
    48         }
    49         else{
    50             printf("Possible
    ");
    51             for(int i = 1; i<= m; i++){
    52                 printf("%d", a[i]);
    53                 if(i != m) printf(" ");
    54             }
    55             printf("
    ");
    56         }
    57     }
    58 
    59     return 0;
    60 }
  • 相关阅读:
    【转】软链接和硬链接到底有啥作用和区别
    useradd命令详解
    【转】Linux下MySQL数据库安装及配置方法
    【转】MySQL的安装与配置——详细教程-window系统下
    mysql服务器常用命令
    【转】DDL/DML/DCL区别概述
    tmux终端工具的简单使用
    linux go环境安装和基本项目结构
    ClickHouse高可用集群的配置
    centos7下使用rpm包安装clickhouse
  • 原文地址:https://www.cnblogs.com/miaowTracy/p/5336192.html
Copyright © 2011-2022 走看看