Relative Relatives HDU - 1311(暴力数组)

在Ted的100岁生日之际,通过一系列仅记录了父亲姓名、子女姓名及父亲年龄的出生证明,构建了一个算法来揭示Ted家族成员的年龄顺序。此算法使用暴力搜索方法,基于Ted的年龄作为起点,递归推算出所有后代的年龄。
摘要由CSDN通过智能技术生成

今天是特德100岁生日。几周前,你被泰德家族选为联络泰德所有后代并组织一个惊喜派对的人。为了使这项任务更简单,您创建了一个以年龄为优先顺序的列表,列出了从Ted派生的所有人。同龄后代按字典顺序列出。              

你唯一需要帮助的材料就是出生证明。奇怪的是,这些出生证明没有注明日期。他们简单地列出了父亲的名字,孩子的名字,以及孩子出生时父亲的确切年龄。              

输入              

这个问题的输入将以包含一个整数n的行开始,该整数n指示数据集的数目。每个数据集将根据以下描述进行格式化。              单个数据集有两个组件:              

后代计数-包含单个整数x(其中0<x<100)的行,指示Ted后代的数量。              

出生证明列表-X个出生证明的数据,每行一个证明的数据。每个证书的数据将采用“fname cname fage”格式,其中:              fname是父亲的名字。              

cname是孩子的名字。              

Fage是CNames出生之日父亲的整数年龄。              

注:名称是个人的唯一标识符,不包含嵌入的空白。              

泰德的所有后代都共享泰德的生日。因此,任何两个年龄差都是整数年。(对于那些非常挑剔的人来说,假设他们都是在同一个时间、分钟、秒等等出生的……他们出生的年份。)              

你有泰德所有后代的出生证明(完整的收集)。              

输出              

对于每个数据集,将有x+1行输出。第一个将读取“数据集Y”,其中Y是第一个数据集的1,2是第二个数据集的2,等等。随后的X行使用“名称年龄”格式构成了特德后代的年龄优先列表及其年龄。同龄后代将按字典顺序列出。

 

Sample Input

2
1
Ted Bill 25
4
Ray James 40
James Beelzebub 17
Ray Mark 75
Ted Ray 20

Sample Output

DATASET 1
Bill 75
DATASET 2
Ray 80
James 40
Beelzebub 23
Mark 5

一开始没有找到很好的方法(我太菜了),其实二重循环暴力法就可以简单,题意很简单,就是给出一个100的人,他的孩子和子孙之间年龄关系,只有这个100岁老人有年龄,其他的孩子都必须从这个100数据衍生出来。一个一个去查找暴力就可以解决。

#include<iostream>
#include<bits/stdc++.h>
const int maxn=105;
typedef long long ll;
using namespace std;

string f[maxn];
string c[maxn];
int year[maxn];

typedef struct
{
	string name;
	int nian;
	
}point;

point ren[maxn];

bool cmp(point a,point b)
{
	if(a.nian!=b.nian)
		return a.nian>b.nian;
	if(a.name!=b.name)
		return a.name<b.name;
}

int main()
{
	int i,j;
	
	int t;
	cin>>t;
	int kase=0;
	while(t--)
	{
		int num;
		cin>>num;
		for(i=0;i<num;i++)
			cin>>f[i]>>c[i]>>year[i];
			
		ren[0].name="Ted";
		ren[0].nian=100;
		int k=1;
				
		for(i=0;i<num;i++)
		{
			for(j=0;j<num;j++)
			{
				if(ren[i].name==f[j])
				{
					ren[k].name=c[j];
					ren[k].nian=ren[i].nian-year[j];
					k++;
				}
			}
		}
		sort(ren,ren+num+1,cmp);
		
		cout<<"DATASET "<<++kase<<endl;
		for(i=1;i<=num;i++)
		{
			cout<<ren[i].name<<' '<<ren[i].nian<<endl;
		}
		
	}
		
	return 0;
}

这个用了3个数组将父亲孩子,和年龄差距都按下标都储存在一维数组和字符串中,只要找到父亲(年龄已经知道),这就可以按下标将孩子,年龄装到一个结构体数组中。最后sort 排一下序就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值