C语言 将文章划分为最少的单词。

Problem Description
   著名的考古学家石教授在云梦高原上发现了一处古代城市遗址。让教授欣喜的是在这个他称为冰峰城(Ice-Peak City)的城市中有12块巨大石碑,上面刻着用某种文字书写的资料,他称这种文字为冰峰文。然而当教授试图再次找到冰峰城时,却屡屡无功而返。
   幸好当时教授把石碑上的文字都拍摄了下来,为了解开冰峰城的秘密,教授和他的助手牛博士开始研究冰峰文,发现冰峰文只有陈述句这一种句型和名词(n)、动词(v)、辅词(a)这三类单词,且其文法很简单:
<文章> ::= <句子> { <句子> }
<句子> ::= <陈述句>
<陈述句> ::= <名词短语> { <动词短语> <名词短语> } [ <动词短语> ]
<名词短语> ::= <名词> | [ <辅词> ] <名词短语>
<动词短语> ::= <动词> | [ <辅词> ] <动词短语>
<单词> ::= <名词> | <动词> | <辅词>
注:其中<名词>、<动词>和<辅词>由词典给出,“::=”表示定义为,“|”表示或,{}内的项可以重复任意多次或不出现,[]内的项可以出现一次或不出现。
   在研究了大量资料后,他们总结了一部冰峰文词典,由于冰峰文恰好有26个字母,为了研究方便,用字母a到z表示它们。
冰峰文在句子和句子之间以及单词和单词之间没有任何分隔符,因此划分单词和句子令石教授和牛博士感到非常麻烦,于是他们想到了使用计算机来帮助解决这个问题。假设你接受了这份工作,你的第一个任务是写一个程序,将一篇冰峰文文章划分为最少的句子,在这个前提下,将文章划分为最少的单词。

Input
输入文件含有多组数据。
对于每一组数据来说,第1行为词典中的单词数n(n<=1000)。
第2行至第(n+1)行每行表示一个单词,形为“α.mot”, α表示词性,可能是n(名词),v(动词),a(辅词)中的一个,mot为单词,单词的长度不超过20。拼写相同而词性不同的单词视为不同的单词,如输入示例中的n.kick与v.kick是两个不同的单词。
第(n+2)行为需要划分的文章,以“.”结束。
输入中的文章确保为冰峰文。文章是由有限个句子组成的,每个句子只包含有限个单词。文章长度不超过5KB。

Output
对于每一组数据,输出两行,每行一个整数。
第1行为划分出来的句子数。
第2行为划分出来的单词数。
每一组数据之后保留出一个空行。

Sample Input
11
n.table
n.baleine
a.silly
n.snoopy
n.sillysnoopy
v.is
v.isnot
n.kick
v.kick
a.big
v.cry
sillysnoopyisnotbigtablebaleinekicksnoopysillycry.

Sample Output
2
9

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
给出一段没有标点的文章,找出第n个单词的长度c语言问题,代码哪里错了?困扰半天了求大佬解答
2
单词复数 萌新求助 用c语言解决
4
输入一个英文句子,将单词的第一个字母改成大写字母,运用C语言怎么做
0
C语言的编程,输入一个英文句子,将每个单词的第一个字母改成大写字母
0
如何用C语言来实现对此自然数集合的所有可能的划分?
0
题目问问最少可使卡上的余额为多少,请教如何利用C语言的程序编写代码实现的技术来求
0
每个单词的首字母的大写组合称为该词组的缩写,用C语言的代码输出这些缩写编写的程序代码的实现的方式
1
那些直接问答案的同学,你们用的C语言编程环境是什么啊?
3
请大家帮帮萌新 为什么C语言运行中文会乱码?
0
这个每个单词的第一个字母改成大写字母的问题,怎么采用C语言的程序的设计的技术来实现编写
1
c语言字符串gets()函数使用,编译为什么通过不了?
3
C语言问题 数组问题 求解
3
C语言文件操作的指针问题
2
关于C语言函数内存分配的疑问
0
c语言如何读取文本文件中指定的字符串并保存到字符串数组中?
2
用C语言写了一个输入一个一维数组的函数,如何在函数中调用该数组?
0
C语言最少要将蛋糕切成多少块
0
单词的所有字母的价值之和的计算,用 C语言来实现
0
单词的字符串的一个处理问题,用C语言
1
sublime text3在运行C语言遇到的问题