我是靠谱客的博主 爱笑嚓茶,最近开发中收集的这篇文章主要介绍Abandoned Animal(BAPC2017 Preliminaries ),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Abandoned Animal

题目描述

Your little sister has been a big help today: she went into town to do all the groceries! During this grand voyage, she was accompanied by her fluffy friend, Mr. Fluffynose the Stuffed Animal. However, after her return, it seems that she has left him somewhere along the route! This is devastating news for your little sister, and as she won’t stop crying about it, you decide to retrace her steps through town.

You know that your sister will hold on to her beloved Fluffynose whenever possible, so the only time she could’ve lost it is when she grabbed an item on her shopping list. So, all you have to do is figure out at what store she bought what, and then you’ll reunite her with her counterpart in no time! However, you soon find out that this isn’t quite as easy as you thought: she went to a lot of stores, and although she knows the names of the stores she went to and the order in which she visited them, she does not recall what she bought at each store (it could have been nothing!). It would take a lot of time to blindly search all the stores for all these items. As you have better things to do today, like solving programming problems, you want to spend as little time on this retrieval as possible. Therefore, you want to know exactly which items your sister bought at each store before you start your search. 

For this you have two pieces of information: firstly you know the inventory of all stores your sister went to.Secondly, you know exactly in what order she purchased the groceries, as she has very carefully stacked all items into her bag. You decide to number the stores your sister visited according to the order in which she visited them. Given this information, you want to decide whether you know for sure where she bought every item so you can retrace her steps as efficiently as possible.

 

输入

The input starts with a line with a single integer 1 ≤ N ≤ 100,000, the number of supermarkets in town. Then follows a line with an integer N ≤ K ≤ 100,000, after which K lines follow with a space-separated integer i (between 0 and N − 1) and a string S (consisting of only lowercase letters, at most 10), denoting that item S is available at the   ith store that your sister visited. It is guaranteed that every store has at least one item, every item is available
at at least one store, and that every item occurs at most once at every store.
The second part of the input contains the list of items your sister bought, in order of purchase.It starts with a line with an integer M ≤ K, the number of items your sister has bought. Then follow M lines, each with string T, denoting the name of the item your sister bought. The items are given in the order she purchased them in. All items that your sister has bought are unique.

 

输出

Output “impossible” if there is no path through the stores that matches your sister’s description.
Output “unique” if there is exactly one path through the stores that matches.
Output “ambiguous” if there are multiple possible paths.

样例输入

3
3
0 chocolate
1 icecream
2 cookies
3
chocolate
cookies
icecream

样例输出

impossible

样例输入

3 
4
0 chocolate
1 icecream
2 cookies
2 chocolate
3
chocolate
icecream
cookies

样例输出

unique

来源/分类

BAPC2017 Preliminaries 

 

英语确实是硬伤,六级阅读理解题

题意:一共有n 个商店(标号为  0  --> n-1),每个商店有多种商品 , 给一个购物单,问是否能按照顺序从 0 -- > n-1 商店购买,如果有多条路径输出 ambiguous,只有一条输出 unique,没有输出 impossible

题解:首先将字符串用 map 映射 到 1 --> tot , 先将每个商品存到对应的商店 ,然后枚举商店,判断该商店中是否存在购物单中的商品,有就往下买,这样能判断是否有路径,我们可以加一个pre 记录前面一个商品 , 如果该商品也存在,就说明存在多路径,说的可能不明白,请参考代码

AC code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
map<string,int>Hash;
vector<int>shop[N];
int menu[N];
int tot = 0;
int path(int num,int name)
{
int l = 0,r = shop[num].size() - 1;
while(l <= r)
{
int mid = (l+r)>>1;
if(shop[num][mid] < name)
l = mid + 1;
else if(shop[num][mid] > name)
r = mid - 1;
else return 1;
}
return 0;
}
int main()
{
int n,m,k,id;
string name;
cin>>n>>k;
while(k--)
{
cin>>id>>name;
if(!Hash[name]) Hash[name] = ++tot;
shop[id].push_back(Hash[name]);
}
for(int i = 0;i < n; i++){
sort(shop[i].begin(),shop[i].end());
// for(int j = 0;j < shop[i].size();j++)
//
printf("%d%c",shop[i][j],j == shop[i].size()-1?'n':' ');

}
cin>>m;
menu[0] = 0;
for(int i = 1;i <= m;i++)
{
cin>>name;
menu[i] = Hash[name];
}
int goodnum = 1,flag1 = 1,flag2 = 0,pre = 0;
for(int i = 0;i < n;i++)
{
if(path(i,pre)) flag2 = 1;
while(goodnum <= m)
{
if(!path(i,menu[goodnum]))
break;
goodnum++;
}
pre = menu[goodnum - 1];
}
if(goodnum <= m) flag1 = 0;
//
cout<<"flag1:"<<flag1<<" falg2"<<flag2<<endl;
if(flag2&&flag1)
puts("ambiguous");
else if(!flag2&&flag1)
puts("unique");
else puts("impossible");
return 0;
}

 

转载于:https://www.cnblogs.com/lemon-jade/p/9533384.html

最后

以上就是爱笑嚓茶为你收集整理的Abandoned Animal(BAPC2017 Preliminaries )的全部内容,希望文章能够帮你解决Abandoned Animal(BAPC2017 Preliminaries )所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部