1、AK的故事之英语学习篇(mistake)
程序名: s
输入文件名:
输出文件名: mistake。out
问题描述:
面对竞争日益激烈的社会,AK深感自己的英语水平实在是太差了,他决定在英语方面下苦工。这些日子里,AK每天都要背大量的英语单词,阅读很多英语文章。
终于有一天,AK很高兴的对自己说:“我的英语已经没问题了!”他决定写一篇英语文章来显示自己的水平……
AK将自己的文章交给了他的英语老师Mr。 Zhu,满以为Mr。 Zhu会大加赞赏。谁知,Mr。 Zhu却严厉的批评了AK。原来AK在这篇文章中拼错了许多许多单词。
单词这一关都没过,别说文章的条理性了。
AK看到了自己的不足,决心从这篇文章开始重新奋斗!他首先要做的是找出文章中拼错的单词,并修正。但是这也不是一件容易的事,因为AK这篇文章写得太长了,而且拼错的单词也太多了,AK的水平太低,根本没法把拼错的单词都找出来。
于是,AK找到了你,希望你帮助他完成这一任务。
输入格式:
从文本文件 中读入数据。
第一行一个整数N(N≤10000),表示字典中单词的个数。
第2~N+1行,每行一个单词,单词的长度不超过10。
第N+2行,列出了AK在文章中所用到的单词(一律为小写字母),单词间用空格分隔,单词的个数不会超过1000。
输出格式:
输出到文本文件mistake。out中。
一个整数,表示AK拼错的单词的数目。
注意:如果一个单词在字典中无法找到,那么我们就认为这个单词拼错了。
输入样例:
2
love
this
i love this game
// 注意:如果出现两个相同的单词,且都拼错了,则计拼错单词数为2。
输出样例:
2
算法提示:
字典的建立是本题的关键,用二叉排序树、堆及散列表可实现快速查找。
2、补丁(bugs)
程序名: s
输入文件名:
输出文件名: bugs。out
问题描述:
一个程序总有个错误,公司经常发布补丁来修正这些错误,遗憾的是,每用一个补丁,在修正某些错误的时候,同时会加入某些错误,每个补丁都有一定运行时间。
某公司发表了一个游戏,出现了n个错误B={b1,b2,b3,……bn},于是该公司发布了m个补丁,每个补丁的应用都是有条件的(即哪些错误必须存在,哪些错误不能存在)。
求最少需要多少时间可全部修正这些错误。
输入格式:
输入文件第一行有两个正整数n和m,n表示错误总数,m表示补丁总数,1<=n<=20,1<=m<=100。
接下来m行给出了m个补丁的信息。每行包括一个正整数(表示此补丁程序的运行时间)和两个字符串,
第一个字符串描述了应用该补丁的条件。字符串的第i个字符,如果是‘+’,表示在软件中必须存在第bi号错误;如果是‘-’,表示软件中错误bi不能存在;如果是‘0’,则表示错误bi存在或不存在均可(即对应用该补丁没用影响)。
第二个字符串描述了应用该补丁的效果。字符串的第i个,如果是‘+’,表示产生了一个新错误bi;如果是‘-’,表示错误bi被修改好了;如果是‘0’,则表示错误bi不变(即原来存在的,仍然存在;原来不存在,还是不存在)。
输出格式:
输出一个整数,如果问题有解,输出总耗时。
否则输出-1。
样例输入:
3 5
1 0-+ -+-
3 +-- -00
4 000 00-
6 +0+ -0-
3 0+0 0-0
样例输出:
7
3、家谱(gen)
程序名: s
输入文件名:
输出文件名: gen。out
问题描述:
现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。
输入格式:
输入文件由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。
规定每个人的名字都有且只有6个字符,而且首字母大写,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数最多可能达到50000人,家谱中的记载不超过30代。
输出格式:
按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。
样例输入:
#George
+Rodney
#Arthur
+Gareth
+Walter
#Gareth
+Edward
?Edward
?Walter
?Rodney
?Arthur
$
样例输出:
Edward Arthur
Walter Arthur
Rodney George
Arthur Arthur
解答出一题即可。
算法: 用一维字符串数组排列 程序见附件 注意:在输入字符串的前面加上数字,父子俩的名字前的数字一样。