2017BAPC初赛A(思维,无序图,向量)
#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(思维,无序图,向量)的更多相关文章
- 重磅!!!一文总结Pytorch的8张思维导图!
本文以思维导图的形式,为大家介绍了深度学习的核心内容,主要包括:深度学习与Pytorch简介.词向量.用pytorch处理常见的NLP和CV任务.图片风格迁移和GAN.Seq2Seq与Attentio ...
- Photoshop、Illustrator思维导图笔记
半年前学习Photoshop时记得的思维导图笔记,可能不是很全,常用的基本都记下了.
- "Becoming Functional" 阅读笔记+思维导图
<Becoming Functional>是O'Reilly公司今年(2014)7月发布的一本薄薄的小册子,151页,介绍了函数式编程的基本概念.全书使用代码范例都是基于JVM的编程语言, ...
- IT技术思维导图
在网上看到有个人总结的java技术的东东,觉得很好,就保存下来了,码农还真是累啊,只有不断的学习才能有所提高,才能拿更多的RMB啊. java技术思维导图 服务端思维导图 前端思维导图
- XMind共享未保存的思维导图的教程
我们在XMind 6对导图进行局域网共享时,一般都是对XMind文件先进行保存再共享,那样是忘记保存呢,该如何共享.局域网共享功能是XMind 6特有的功能之一,自是较为完善,性能强大的功能,当然有办 ...
- 思维导图FreeMind安装问题及简单使用
思维导图软件使用的坎坷之路 一直想将思维导图加入到工作环境当中 最开始使用的是 MindManager(http://www.mindmanager.cc/) ,而且感觉利用它制作出来的导图外观也比较 ...
- 【干货】jsMind思维导图整合Easyui的右键菜单
原材料: 1.web版本的JavaScript思维导图(BSD开源协议)[戳这里去官网]. 2.easyui最新版[戳这里去官网]. 这里是原本的jsMind: 在线测试地址 :http://hizz ...
- Unity_UGUI知识点思维导图
转自 http://blog.csdn.net/qq_34134078/article/details/51772568 个人总结的UGUI学习知识要点思维导图,四张部分图及最后一张整体图 1.UI基 ...
- 思维导图FreeMind
什么是MindMap? MindMap(被译成思维导图或心智图)是一种思维工具,由英国的记忆之父托尼-博赞发明. MindMap是一种新的思维模式,它将左脑的逻辑.顺序.条例.文字.数字,以及右脑的图 ...
- 《HTML重构》读书笔记&思维导图
最近读了<HTML重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助 ...
随机推荐
- node.js redis对事务的控制
redis对事务的支持还是比较差的,就是把所有的执行命令方到队列中一个一个执行 multi开启一个事务,exec执行事务集合中的命令 代码: var redisClient; redisClient. ...
- 全面解析Bootstrap手风琴效果
触发手风琴可以通过自定义的data-toggle 属性来触发.其中data-toggle值设置为 collapse,data-target="#折叠区标识符". 第一步:设计一个面 ...
- JSP--常用标签
JSTL简介: JSTL是Java中的一个定制标签库集 实现了JSP页面中的代码复用,提高效率 可读性更强,方便前端查看与开发 环境搭建: JSTL标签和Servlet及JSP页面有比较严格的版本对应 ...
- ACM学习历程—UESTC 1218 Pick The Sticks(动态规划)(2015CCPC D)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 题目大意就是求n根木棒能不能放进一个容器里,乍一看像01背包,但是容器的两端可以溢出容器,只要两端的木 ...
- ACM学习历程—HDU 3915 Game(Nim博弈 && xor高斯消元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3915 题目大意是给了n个堆,然后去掉一些堆,使得先手变成必败局势. 首先这是个Nim博弈,必败局势是所 ...
- prufer BZOJ1211: [HNOI2004]树的计数
以前做过几题..好久过去全忘了. 看来是要记一下... [prufer] n个点的无根树(点都是标号的,distinct)对应一个 长度n-2的数列 所以 n个点的无根树有n^(n-2)种 树 转 p ...
- 洛谷【P1177】【模板】快速排序
题目传送门:https://www.luogu.org/problemnew/show/P1177 快排是一种对于冒泡排序的优化. 对于区间\([l,r]\),我们选择一个键值\(k\),让比\(k\ ...
- EXPLAIN 命令
MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...
- Floyd-Warshall算法:求结点对的最短路径问题
Floyd-Warshall算法:是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包. 原理: Floyd-Warshall算法的原理是动态 ...
- MFC中如何不使用Unicode字符集
命令窗口:调试->属性-> 把字符集设置为:未设置