POJ 2021 Relative Relatives
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 3339 | Accepted: 1462 |
Description
The only materials you had to aid you were birth certificates. Oddly enough, these birth certificates were not dated. They simply listed the father's name, the child's name, and the father's exact age when the baby was born.
Input
A single data set has 2 components:
- Descendant Count - A line containing a single integer X (where 0 < X < 100) indicating the number of Ted's descendants.
- Birth Certificate List - Data for X birth certificates, with one certificate's data per line. Each certificate's data will be of the format "FNAME CNAME FAGE" where:
- FNAME is the father's name.
- CNAME is the child's name.
- FAGE is the integer age of the father on the date of CNAMEs birth.
Note:
- Names are unique identifiers of individuals and contain no embedded white space.
- All of Ted's descendants share Ted's birthday. Therefore, the age difference between any two is an integer number of years. (For those of you that are really picky, assume they were all born at the exact same hour, minute, second, etc... of their birth year.)
- You have a birth certificate for all of Ted's descendants (a complete collection).
Output
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
题目大意:Ted近年100岁,给出n行,每行有两个字符串和一个数字,第一个字符串为父亲的名字,后面为儿子的名字以及父亲比儿子大多少岁,输出整个家族中除了Ted之外所有人的年龄,按年龄从大到小输出,如果年龄相同,则按照名字字典序从小到大输出。
#include <stdio.h>
#include <string>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#include <queue>
using namespace std; typedef struct
{
int age;
string name;
}Person; //父亲和儿子名字键值对
multimap<string, string> father_son;
//儿子和儿子年龄键值对
map<string, int> son_age;
//儿子和儿子比父亲少多少岁键值对
map<string, int> person_toage;
//家族中每个成员
vector<Person> Family; bool cmp(const Person &p1, const Person &p2)
{
if (p1.age == p2.age)
{
return p1.name < p2.name;
}
else
{
return p1.age > p2.age;
}
} //用BFS遍历得出家族中每个人的年龄
void BFS()
{
queue<pair<string, int> > Queue;
Queue.push(make_pair("Ted", ));
while(!Queue.empty())
{
pair<string, int> p = Queue.front();
Queue.pop();
int nCount = father_son.count(p.first);
if (nCount != )
{
//遍历父亲的所有儿子
multimap<string, string>::iterator iter;
for (iter = father_son.lower_bound(p.first); iter != father_son.upper_bound(p.first); iter++)
{
//儿子的年龄等于父亲的年龄减去父子年龄之差
son_age[iter->second] = p.second - person_toage[iter->second];
Person temp;
temp.name = iter->second;
temp.age = son_age[iter->second];
Family.push_back(temp);
//将当前儿子入队,作为后序的父亲
Queue.push(make_pair(iter->second, son_age[iter->second]));
}
}
}
} int main()
{
int nCase, n, age, nDataset = ;
string father, son;
cin>>nCase;
while(nCase--)
{
cin>>n;
father_son.clear();
son_age.clear();
person_toage.clear();
Family.clear();
son_age.insert(make_pair("Ted", ));
++nDataset;
for (int i = ; i < n; i++)
{
cin>>father>>son>>age;
father_son.insert(make_pair(father, son));
person_toage.insert(make_pair(son, age));
}
BFS();
sort(Family.begin(), Family.end(), cmp);
cout<<"DATASET "<<nDataset<<endl;
for (vector<Person>::iterator iter = Family.begin(); iter != Family.end(); iter++)
{
cout<<iter->name<<" "<<iter->age<<endl;
}
}
return ;
}
POJ 2021 Relative Relatives的更多相关文章
- poj 2021 Relative Relatives(暴力)
题目链接:http://poj.org/problem?id=2021 思路分析:由于数据较小,采用O(N^2)的暴力算法,算出所有后代的年龄,再排序输出. 代码分析: #include <io ...
- POJ 2021 Relative Relatives(map+树的遍历)
题意: 今天是Ted的100岁生日.凑巧的是,他家族里面每个人都跟他同一天生日,但是年份不同. 现在只给出一些 父亲的名字,孩子的名字,以及孩子出生时父亲的年龄, 要求将Ted以外的家族成员按年龄降序 ...
- POJ 2407:Relatives(欧拉函数模板)
Relatives AC代码 Relatives Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16186 Accept ...
- POJ 2021
#include <iostream> #include <string> #include <algorithm> #define MAXN 105 using ...
- 【POJ 2407】 Relatives
[题目链接] 点击打开链接 [算法] 欧拉函数 [代码] #include <algorithm> #include <bitset> #include <cctype& ...
- 【poj 2407】Relatives(数论--欧拉函数 模版题)
题意就是求10^9以内的正整数的欧拉函数(Φ(n)表示<=n的与n互质的正整数个数). 解法:用欧拉筛和欧拉函数的一些性质: 1.若p是质数,Φ(p)=p-1: 2.欧拉函数是积性函 ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- OJ题解记录计划
容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001 A+B Problem First AC: 2 ...
- 这些MongoDB的隐藏操作你真的都掌握了吗?反正我是刚知道
背景 最近公司系统还原用户时偶尔会出现部分用户信息未还原成功的问题,最为开发人员,最头疼的不是代码存在bug,而是测试发现了bug,但一旦我去重现,它就不见了.Are you kidding me? ...
随机推荐
- HTTP 错误 404.15 - Not Found请求筛选模块被配置为拒绝包含的查询字符串过长的请求
web项目中,get方式传值是通过地址栏中的url参数进行传递的.除了浏览器对url长度的限制大小不一之外,出于安全考虑, IIS中对于URL中参数大小也是有限制的,默认为2048KB. 如果参数大于 ...
- 爬虫1_python2
# -*- coding: UTF-8 -*- # python2爬虫 import urllib f = urllib.urlopen("http://www.itcast.cn/&quo ...
- python_102_属性方法
# 属性方法:把一个方法变成一个静态属性 #1 class Dog(object): def __init__(self,name): self.name=name @property#属性 def ...
- JQuery EasyUI学习记录(三)
1.jQuery EasyUI messager使用方式 1.1 alert方法 $(function(){ //1.alert方法---提示框 $.messager.alert("标题&q ...
- TCP/UDP 协议介绍
TCP/IP五层网络结构模型 物理层:物理层建立在物理通信介质的基础上,作为系统和通信介质的接口,用来实现数据链路实体间透明的比特 (bit) 流传输.只有该层为真实物理通信,其它各层为虚拟通信 数据 ...
- React动态import()
React动态import() react-router@v4代码分离,推荐的import().这里分享webpack配置和使用方法. 首先安装两个必须的包 cnpm i react-loadable ...
- CentOS 编译安装PHP5.6(7以上也通用)
由于公司有新服务器需要构建一套LNMP平台,且需要编译安装各个部件,所以记录下此文章. 这是安装PHP涉及到的软件包(可以自行决定使用哪个版本): ├── libiconv-1.15.tar.gz ├ ...
- 【最大流】bzoj1711: [Usaco2007 Open]Dining吃饭
正在网络流入门(原来这种题用网络流做) Description 农夫JOHN为牛们做了很好的食品,但是牛吃饭很挑食. 每一头牛只喜欢吃一些食品和饮料而别的一概不吃.虽然他不一定能把所有牛喂饱,他还是想 ...
- 【Python学习之五】高级特性1(切片、迭代、列表生成器、生成器、迭代器)
1.切片 有一个list—>L = [1,2,3,4,5,6,7]或tuple—>T = (1,2,3,4,5,6,7),如果想取得前三个元素,怎么操作? 硬方法,也是低效的方法是:L= ...
- Oracle 数据库常用SQL语句(2)查询语句
一.SQL基础查询 1.select语句 格式:select 字段 from 表名; 2.where 用于限制查询的结果. 3.查询条件 > < >= <= = != 4.与 ...