#include<bits/stdc++.h>
using namespace std;
string goods,sister[100010];
int x,m;
unordered_map<string,int>mp;
vector<int>g[100010],great,les;
int road()
{
    great.push_back(1);
    les.push_back(1);
    int shopping=0;//正序从商店开始浏览
    for(int i=1;i<=m;i++)
    {
        vector<int>&tmp=g[mp[sister[i]]];//列举包含该商品的所有商店
        int pos=lower_bound(tmp.begin(),tmp.end(),shopping)-tmp.begin();//找到第一次出现该商品的商店位置
        if(pos>=(int)tmp.size())//该商品在未访问的商店没有的卖
            return 0;
        shopping=tmp[pos];//出现该商品的商店,每次移动到这位置
        great.push_back(shopping);//添加进入正序商店路线
    }
    int rshopping=*g[mp[sister[m]]].rbegin();//找到最后一件购买的商品有卖的最远的商店
    for(int i=m;i>=1;i--)
    {
        vector<int>&tmp=g[mp[sister[i]]];
        int pos=upper_bound(tmp.begin(),tmp.end(),rshopping)-tmp.begin()-1;//尽可能选择高的路径(在一家商店连续购买【反序购买】),如果和原本路径一致则答案唯一
        rshopping=tmp[pos];
        les.push_back(rshopping);
    }
    for(int i=1;i<=m;i++)
        if(great[i]!=les[m-i+1])//路线不一致
            return 2;
    return 1;
}
int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int k;
    cin>>k;
    int cnt=1;
    for(int i=1;i<=k;i++)
    {
        cin>>x>>goods;
        if(!mp.count(goods))//如果这个商品第一次出现
            mp[goods]=cnt++;//给它一个编号
        g[mp[goods]].push_back(x);//将这个商店的位置放入商品编号的向量中
    }
    for(int i=1;i<cnt;i++)
        sort(g[i].begin(),g[i].end(),less<int>());//升序排序,和正常访问商店顺序一致
    cin>>m;
    int flag=0;
    for(int i=1;i<=m;i++)
    {
        cin>>sister[i];
        if(!mp.count(sister[i]))//商店里没有列表商品
            flag=1;
    }
    if(flag==1||road()==0)
        printf("impossible");
    else if(road()==1)
        printf("unique");
    else
        printf("ambiguous");
    return 0;
}

/*less<int>升序排列,不写默认升序,greater<int>降序排列,不写就排反了,lower_bound大于等于的第一个地址,upper_bound严格大于的第一个地址,如果用begin()和end()会返回迭代器(我也不知道迭代器是啥)数组的话可以直接+下标,查询区间是左闭右开区间*/

2017BAPC初赛A(思维,无序图,向量)的更多相关文章

  1. 重磅!!!一文总结Pytorch的8张思维导图!

    本文以思维导图的形式,为大家介绍了深度学习的核心内容,主要包括:深度学习与Pytorch简介.词向量.用pytorch处理常见的NLP和CV任务.图片风格迁移和GAN.Seq2Seq与Attentio ...

  2. Photoshop、Illustrator思维导图笔记

    半年前学习Photoshop时记得的思维导图笔记,可能不是很全,常用的基本都记下了.

  3. "Becoming Functional" 阅读笔记+思维导图

    <Becoming Functional>是O'Reilly公司今年(2014)7月发布的一本薄薄的小册子,151页,介绍了函数式编程的基本概念.全书使用代码范例都是基于JVM的编程语言, ...

  4. IT技术思维导图

    在网上看到有个人总结的java技术的东东,觉得很好,就保存下来了,码农还真是累啊,只有不断的学习才能有所提高,才能拿更多的RMB啊. java技术思维导图 服务端思维导图 前端思维导图

  5. XMind共享未保存的思维导图的教程

    我们在XMind 6对导图进行局域网共享时,一般都是对XMind文件先进行保存再共享,那样是忘记保存呢,该如何共享.局域网共享功能是XMind 6特有的功能之一,自是较为完善,性能强大的功能,当然有办 ...

  6. 思维导图FreeMind安装问题及简单使用

    思维导图软件使用的坎坷之路 一直想将思维导图加入到工作环境当中 最开始使用的是 MindManager(http://www.mindmanager.cc/) ,而且感觉利用它制作出来的导图外观也比较 ...

  7. 【干货】jsMind思维导图整合Easyui的右键菜单

    原材料: 1.web版本的JavaScript思维导图(BSD开源协议)[戳这里去官网]. 2.easyui最新版[戳这里去官网]. 这里是原本的jsMind: 在线测试地址 :http://hizz ...

  8. Unity_UGUI知识点思维导图

    转自 http://blog.csdn.net/qq_34134078/article/details/51772568 个人总结的UGUI学习知识要点思维导图,四张部分图及最后一张整体图 1.UI基 ...

  9. 思维导图FreeMind

    什么是MindMap? MindMap(被译成思维导图或心智图)是一种思维工具,由英国的记忆之父托尼-博赞发明. MindMap是一种新的思维模式,它将左脑的逻辑.顺序.条例.文字.数字,以及右脑的图 ...

  10. 《HTML重构》读书笔记&思维导图

    最近读了<HTML重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助 ...

随机推荐

  1. R 语言实现求导

    前言 高等数学是每个大学生都要学习的一门数学基础课,同时也可能是考完试后最容易忘记的一门知识.我在学习高数的时候绞尽脑汁,但始终都不知道为何而学.生活和工作基本用不到,就算是在计算机行业和金融行业,能 ...

  2. spring学习(4)

    在spring容器内拼凑bean叫做装配.装配bean的时候,需要告诉容器哪些bean以及容器如何使用依赖注入将它们配合在一起. 上下文定义文件的根元素是<beans>,<beans ...

  3. html怎样可是使文本框内容不可修改

    html怎样可是使文本框内容不可修改 <input type="text" readonly="readonly" onfocus="alert ...

  4. 分享知识-快乐自己:初中级 java 面试题宝典

    1):Jsp的重定向和转发的流程有什么区别 重定向是客户端行为,转发是服务器端行为 重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发 重定向 ...

  5. 不要使用Android Studio的Git Commit了---->记一次debug

    今天下午写了一些代码,吃晚饭时分用Android Studio commit了一下,不知道有没有选择Commit and push,结果刚才代码出bug我想回滚到上个版本的时候,发现Android S ...

  6. Java Main Differences between HashMap HashTable and ConcurrentHashMap

    转自这篇帖子:http://www.importnew.com/7010.html HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以 ...

  7. [转]CSS禁止文字选择

    user-select有两个值: none:用户不能选择文本 text:用户可以选择文本 需要注意的是:user-select并不是一个W3C的CSS标准属性,浏览器支持的不完整,需要对每种浏览器进行 ...

  8. Operating System-Thread(2) Multi-Process-Parallel vs Multi-Thread-Parallel

    本文主要介绍线程的模型 一.Multi-Process-Parallel vs Multi-Thread-Parallel 多进程的并行:CPU在多个进程之间进行切换,系统给人一种多个进程在并行执行的 ...

  9. canvas变换(移动,缩放等)

    代码: 1 /** 2 * Created by Administrator on 2016/1/30. 3 */ 4 function draw (id){ 5 var canvas = docum ...

  10. MODBUS TCP和MODBUS RTU的差别

    TCP和RTU协议非常类似, MBAP Header长度共7个字节,分别为Transaction identifier(事务标识符),Protocol identifier(协议标识符),Length ...