九度oj 题目1035:找出直系亲属
- 题目描述:
-
如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。
- 输入:
-
输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如ABC的字符串,表示A的父母亲分别是B和C,如果A的父母亲信息不全,则用-代替,例如A-C,再然后是m行形式如FA的字符串,表示询问F和A的关系。
当n和m为0时结束输入。
- 输出:
-
如果询问的2个人是直系亲属,请按题目描述输出2者的关系,如果没有直系关系,请输出-。
具体含义和输出格式参见样例.
- 样例输入:
-
3 2
ABC
CDE
EFG
FA
BE
0 0
- 样例输出:
-
great-grandparent
-#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#define MIN -999999
int father[];
int mother[]; char temp[]; int relation[][]; int find(int p, int q) {
if(father[p] == q) {
return ;
}
if(mother[p] == q) {
return ;
}
if(relation[p][q] != MIN) {
return relation[p][q];
}
if(father[p] != -) {
int ansf = find(father[p],q);
if(ansf != ) {
relation[p][q] = + ansf;
return + ansf;
}
}
if(mother[p] != -) {
int ansm = find(mother[p],q);
if(ansm != ) {
relation[p][q] = + ansm;
return + ansm;
}
}
return ; } void prinfop(int n) {
if(n == ) {
puts("-");
}
else if(n == ) {
puts("parent");
}
else if(n == ) {
puts("grandparent");
}
else {
for(int i = ; i < n; i++) {
printf("%s","great-");
}
puts("grandparent");
}
} void prinfoc(int n) {
if(n == ) {
puts("-");
}
else if(n == ) {
puts("child");
}
else if(n == ) {
puts("grandchild");
}
else {
for(int i = ; i < n; i++) {
printf("%s","great-");
}
puts("grandchild");
}
}
int main(int argc, char const *argv[])
{
int n, m;
//freopen("input.txt","r",stdin);
scanf("%d %d",&n, &m);
while(!(n == && m == )) {
for(int i = ; i < ; i++) {
father[i] = -;
mother[i] = -;
for(int j = ; j < ; j++) {
relation[i][j] = MIN;
}
}
for(int i = ; i < n; i++) {
scanf("%s",temp);
if(temp[] == '-') {
continue;
}
int child = temp[] - 'A';
if(temp[] != '-') {
int fa = temp[] - 'A';
father[child] = fa;
relation[child][fa] = ;
}
if(temp[] != '-') {
int ma = temp[] - 'A';
mother[child] = ma;
relation[child][ma] = ;
} }
for(int i = ; i < m; i++) {
scanf("%s",temp);
if(temp[] == '-' || temp[] == '-') {
puts("-");
continue;
}
int p1 = temp[] - 'A';
int p2 = temp[] - 'A';
int ans1 = find(p1, p2);
if(ans1 == ) {
int ans2 = find(p2,p1);
prinfop(ans2);
}
else {
prinfoc(ans1);
}
}
scanf("%d %d",&n, &m); }
return ;
}这道题用了二叉树的遍历和动态规划的思想,最重要的是一遍通过了(忽略第一次忘记注释freopen),开心!
九度oj 题目1035:找出直系亲属的更多相关文章
- 九度OJ 1256:找出两个只出现了一次的数字 (位运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:568 解决:186 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的 ...
- 九度oj 1407 快速找出最小数
原题链接:http://ac.jobdu.com/problem.php?pid=1407 线段树,区间更新,查询区间最小值. 注意区间更新,查询的时候,区间$\begin{align*}[L,R] ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- 九度OJ 1035:找出直系亲属(二叉树)
题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
随机推荐
- linux下phpstudy的搭建以及网站的搭建
step1: 下载SSH连接到IP地址(阿里云上购买的) step2: 安装下载phpstudywget -c http://lamp.phpstudy.net/phpstudy.bin chmod ...
- JBOSS默认连接池配置
jboss5.0mysql连接配置 <?xml version="1.0" encoding="UTF-8"?> <!-- The Hyper ...
- codevs 3096 流输入练习——寻找Sb.VI
时间限制: 1 s 空间限制: 16000 KB 题目等级 : 白银 Silver 题目描述 Description 已知某开放授权人员名叫Serb,由于经常修改各种数据,因此开发人员们都喊他SB ...
- C#入门(3)
C#入门(3) Delegates, Events, Lambda Expressions 最早的windows是使用c风格的函数指针来进行callback的,但是这样仅仅传递了一个内存中的地址,无法 ...
- (七)VMware Harbor 问题:Get https://192.168.3.135:8088/v2/: http:server gave HTTP response to HTTPS client
(一)问题描述 登陆时,报错 docker Get https://192.168.3.135:8088/v2/: http:server gave HTTP response to HTTPS cl ...
- 【原创】最有效解决IE8 position兼容性问题
看了网上的的帖子真是水的一塌糊涂,完全没有解决我和广大网友们的关于ie8下position兼容性问题. 网上有的技术我就不说了 ,大家自行搜索,我想说的重点是 ie8不支持html5的新标签.这是重点 ...
- Catalan 数
概要 在一些面试的智力题中会遇到此数的变形,如果完全不了解,直接想结果是很困难的,故在此简单介绍一下. 基本定义 Catalan 数的定义根据不同的应用环境有很多不同的定义方式,下面给出一个. ...
- javaEE(12)_数据库连接池
一.直接获取数据库连接和通过池获取示意图: 二.编写数据库连接池 1.实现DataSource接口,并实现连接池功能的步骤: •在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加 ...
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
方法一,使用匿名内部类的监听方法,因方法一致代码稍冗余 package com.swift; import java.awt.BorderLayout; import java.awt.Color; ...
- iOS旋屏
横竖屏切换,视图乱了怎么办? 首先,我们必须了解一下下列4种状态,它们被用来描述设备旋转方向: UIInterfaceOrientationLandscapeLeft 向左,即HOME键在右 UIIn ...