#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) }}