博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7-3 家谱处理 (30 分)
阅读量:5128 次
发布时间:2019-06-13

本文共 2400 字,大约阅读时间需要 8 分钟。

7-3 家谱处理 (30 分)

人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究。实验中,使用计算机处理家谱。为了实现这个目的,研究人员将家谱转换为文本文件。下面为家谱文本文件的实例:

John  Robert    Frank    Andrew  Nancy    David

家谱文本文件中,每一行包含一个人的名字。第一行中的名字是这个家族最早的祖先。家谱仅包含最早祖先的后代,而他们的丈夫或妻子不出现在家谱中。每个人的子女比父母多缩进2个空格。以上述家谱文本文件为例,John这个家族最早的祖先,他有两个子女RobertNancyRobert有两个子女FrankAndrewNancy只有一个子女David

在实验中,研究人员还收集了家庭文件,并提取了家谱中有关两个人关系的陈述语句。下面为家谱中关系的陈述语句实例:

John is the parent of RobertRobert is a sibling of NancyDavid is a descendant of Robert

研究人员需要判断每个陈述语句是真还是假,请编写程序帮助研究人员判断。

输入格式:

输入首先给出2个正整数N(2≤N≤100)和M(≤100),其中N为家谱中名字的数量,M为家谱中陈述语句的数量,输入的每行不超过70个字符。

名字的字符串由不超过10个英文字母组成。在家谱中的第一行给出的名字前没有缩进空格。家谱中的其他名字至少缩进2个空格,即他们是家谱中最早祖先(第一行给出的名字)的后代,且如果家谱中一个名字前缩进k个空格,则下一行中名字至多缩进k+2个空格。

在一个家谱中同样的名字不会出现两次,且家谱中没有出现的名字不会出现在陈述语句中。每句陈述语句格式如下,其中XY为家谱中的不同名字:

X is a child of YX is the parent of YX is a sibling of YX is a descendant of YX is an ancestor of Y

输出格式:

对于测试用例中的每句陈述语句,在一行中输出True,如果陈述为真,或False,如果陈述为假。

输入样例:

6 5John  Robert    Frank    Andrew  Nancy    DavidRobert is a child of JohnRobert is an ancestor of AndrewRobert is a sibling of NancyNancy is the parent of FrankJohn is a descendant of Andrew

输出样例:

TrueTrueTrueFalseFalse
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#define FRER() freopen("in.txt","r",stdin);#define FREW() freopen("out.txt","w",stdout);#define mem(a,b) memset(a,b,sizeof(a));#define go int T;scanf("%d",&T);for(int cas=1;cas<=T;cas++)#define mod 1000000007using namespace std;typedef pair
pii;typedef long long ll;map
mmp;string s[70];int cal_space(string str){ int cnt = 0; while(str[cnt++]==' '); return cnt;}bool ok(string s1,string s2){ while(mmp[s1]!=s2&&mmp[s1]!="qp"){ s1=mmp[s1]; } if(mmp[s1]==s2) return true; return false; }int main(){ //FRER(); int n,m; scanf("%d%d",&n,&m); getchar(); for(int i=0;i
=0;i--){ if(str[i]==' ') break; s3+=str[i]; } for(int i=(int)s3.size()-1;i>=0;i--){ s2+=s3[i]; } if(str.find("child")!=-1){ printf("%s\n",mmp[s1]==s2?"True":"False"); } else if(str.find("parent")!=-1){ printf("%s\n",mmp[s2]==s1?"True":"False"); } else if(str.find("descendant")!=-1){ printf("%s\n",ok(s1,s2)?"True":"False"); } else if(str.find("ancestor")!=-1){ printf("%s\n",ok(s2,s1)?"True":"False"); } else{ printf("%s\n",mmp[s1]==mmp[s2]?"True":"False"); } }}

 

转载于:https://www.cnblogs.com/seven7777777/p/10278666.html

你可能感兴趣的文章
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
基于C#编程语言的Mysql常用操作
查看>>
s3c2440实验---定时器
查看>>
[转]: 视图和表的区别和联系
查看>>
图论例题1——NOIP2015信息传递
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>