#P1571. 小偷.例题.STL.映射
小偷.例题.STL.映射
题目描述
农场有 8 个牛棚,它们名称分别是:"Hall", "Kitchen", "Ballroom", "Conservatory", "Cellar", "Library", "Lounge", "Study"。
有一只奶牛在时刻 T 在牛棚 R 被偷了。现在有 6 个嫌疑犯,他们的姓名 分别是:"White", "Green", "Peacock", "Plum", "Scarlett", "Mustard"。
一开始,所有的嫌疑犯都在 第 1 个牛棚"Hall"。
然后按照时间顺序依次发生了 N 个事件,第 i 个事件的格式是给出 3 个参数: eventTime[i] 、 eventPerson[i] 、 eventRoom[i] , 表 示 的 意 义 是 : 在 时 刻 eventTime[i], 嫌 疑 犯 eventPerson[i]来到了牛棚 eventRoom[i]。
法官判案的标准是:如果在时刻 T,有且只有 1 个嫌疑犯在牛棚 R,那么这个嫌疑犯就是小偷!否则找不出 谁是真正的小偷。
输入格式
第一行,R 和 T。R 是字符串,表示案发牛棚的名称,R 是 8 个牛棚其中的一个。1 <= T <= 1000。
第二行,一个整数 N。 0 <= N <= 50。
接下来有 N 行,第 i 行是:eventTime[i]、eventPerson[i]、eventRoom[i]。
输出格式
如果能找出小偷,输出小偷的姓名。
如果不能,输出 -1。
样例
Library 10
3
5 Plum Library
7 Scarlett Library
9 Plum Cellar
Scarlett
Library 8
3
5 Plum Library
7 Scarlett Library
9 Plum Cellar
-1
样例解释
样例1:时刻 10,只有嫌疑犯 Scarlett 在 牛棚 Library
样例2:时刻 8,嫌疑犯 Plum 和嫌疑犯 Scarlett 都在牛棚 Library,所以 找不出小偷是谁。
程序填空
#include<bits/stdc++.h>
using namespace std;
map < string, string> info; //可以简单理解,定义了一个数组info[],infor的下标是string,info数组也是string类型
//第一个string,我们称它map的key, 第二个string,我们称它为value。 如果和传统的数据相比,key就是以前的下标,value就是数组元素的值。
int main()
{
string a,name,room,ans;
int t,tt,n;
cin>>a>>t;
string b[6] = {"White", "Green", "Peacock", "Plum", "Scarlett", "Mustard"} ; // 6 个人的名字
for(int i=0;i<6;i++) //一开始全部人都在 "Hall"
info[ 填空(1) ] = "Hall";
cin>>n;
for(int i=1;i<=n;i++)
{
cin >> tt >> name >> room;
if(tt>t) break; //这个事件发生在案发之后,不需要考虑
info[ 填空(2) ] = 填空(3) ; //更新info,name这个人去了room这个地方
}
int cnt=0;
for(int i=0;i<6;i++)
{
if(info[ 填空(4) ]==a) //判断 案发时,b[i]是不是在 a 房子
{
cnt++; //记录有多少人在案发时刻位于 a 这个房子
ans = b[i];
}
}
if(cnt==1) //案发时只有 1 个人在案发地点,这个人就是小偷
cout<<ans;
else // 案发时有多人或者没有人在案发现场,无法判断
cout<<"-1";
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
填空(4):{{ input(4) }}