Guess the Animal猜动物(暴力)

提交网址:http://gonoi.com.cn/problem/5410

题目描述

奶牛Bessie和她的朋友Elsie厌倦了她们的坚果壳游戏,她们想要玩另一个叫做“猜动物”的常见游戏。
游戏开始时,Bessie会想好一种动物(大部分时候,她想的都是奶牛,这使得游戏相当无聊,但是偶尔Bessie也能有些新意,想一些别的)。随后Elsie会通过问一些问题来猜出Bessie选择的动物。每个问题都是询问这种动物是否具有某个特定的特征,Bessie对于每个问题回答“是”或“不是”。例如:

Elsie:“这种动物是能飞的吗?”
Bessie:“不是。”
Elsie:“这种动物是吃草的吗?”
Bessie:“是。”
Elsie:“这种动物是能产奶的吗?”
Bessie:“是。”
Elsie:“这种动物是会哞哞叫的吗?”
Bessie:“是。”
Elsie:“这样的话我想这种动物是奶牛。”
Bessie:“猜对了!”
如果我们将所有具备符合Elsie到目前为止所提出的问题的特征的动物的集合称为“可行集”,那么Elsie会持续进行提问直到可行集仅包含一种动物,然后她会把这种动物作为她的答案。对于每个问题,Elsie会选择某种动物的一个特征进行询问(即使这个特征并不能进一步帮助她缩小可行集)。她不会关于同一个特征询问两次。

给定Bessie和Elsie知道的所有动物以及它们的特征,请求出Elsie在猜出正确的动物之前能够得到的“是”的回答的最大数量。

输入格式

输入的第一行包含动物的数量N(2≤N≤100)。以下N行每行描述了一种动物。每一行开始是这种动物的名称,接下来是一个整数K(1≤K≤100),接下来是这种动物的K个特征。动物的名称和特征是至多20个小写字母(a…z)组成的字符串。没有两种动物具有完全相同的特征。

输出格式

输出游戏结束之前Elsie可能得到的“是”的回答的最大数量。

输入样例

4
bird 2 flies eatsworms
cow 4 eatsgrass isawesome makesmilk goesmoo
sheep 1 eatsgrass
goat 2 makesmilk eatsgrass

输出样例

3

样例解释

在这个例子中,Elsie可能在对话中获得3个“是”的回答(题目中的例子),并且不可能进行包含超过3个“是”的回答的对话。

解析

直接暴力枚举,统计出每两种动物的共同的特点,我们的答案就是共同特点最多的动物的种数+1

代码

#include<bits/stdc++.h>

using namespace std;
string s[105][105], name;
int maxi=0;   

int main()
{
	int n;  
	int k[105];  
	cin>>n;  
	for(int i=1; i<=n; i++)
	{
		cin>>name>>k[i];  
		for(int j=1; j<=k[i]; j++)
		{
			cin>>s[i][j];  
		}
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=i+1; j<=n; j++)
		{
			int sum=0;  
			for(int o=1; o<=k[i]; o++)
			{
				for(int l=1; l<=k[j]; l++)
				{
					if(s[i][o]==s[j][l])
					{
						sum++;  
						break;  
					}
				}
			}
			maxi=max(maxi, sum);  
		}
	}
	cout<<maxi+1;  
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值