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重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助 ...
随机推荐
- Web前端理论知识记录
Web前端理论知识记录 Elena· 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session) ...
- HTTP-接触
[HTTP]http是基于TCP/IP协议的应用层协议,他不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认端口是80端口. 不同版本http协议里的相关概念[Conten ...
- Python Panda - 学习笔记
#Group by Function df.groupby('Date')[['Date']].count() df.groupby('Date')[['Date']].sum() # if it c ...
- linux命令学习笔记(56):netstat命令
netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况. netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UD ...
- FFMPEG-AVFilter研究
FFMPEG中的libswscale是做像素转换的,但是对于一些复杂的操作,比如添加水印等,这个库就不行了,这时候就要说一下另外一个AVFilter.AVFilter完全可以替代libswscale的 ...
- 移植memtester到android平台
硬件搭建起来能进入系统,首要就是测试内存的稳定性,需要一款内存测试工具. 一般都是选择memtester这款linux软件,下载地址如下:http://pyropus.ca/software/memt ...
- #define与typedef区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如: #define PI 3.141 ...
- XML的二十个热点问题
这些日子,几乎每个人都在谈论XML (Extensible Markup Language),但是很少有人真正理解其含义.XML的推崇者认为它能够解决所有HTML不能解决的问题,让数据在不同的操作系统 ...
- import module, from module import funtion区别
import module与from module import funtion区别: import module导入模块后你需要使用module.function()来调用一个函数 from mod ...
- NBIOT回答
该部分分享的是物联网各垂直应用领域里,NB-IoT技术的部署,看看适合NB-IoT技术的垂直应用场景有哪些?垂直应用服务商又该如何部署? 1 NB-IoT适合的垂直应用场景有哪些? 2 NB-IoT垂 ...