QQ复赛题

hmsuccess 2009-05-19 02:22:22
[code=BatchFile]
Problem D: Split
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 52 Accepted: 11
Description
QQ拼音是深受用户欢迎的一款准确、快速、绿色的拼音输入法。你对输入法感兴趣吗? 现在交给精通程序设计的你一个小任务,也是拼音输入第一步要做的工作,那就是根据用户输入的拼音串将它们划分成合法的音节串。
比如用户输入"tengxunhuanyingni"的时候,这个拼音串(假设为S)可能的划分方式为:
1. teng'xun'huan'ying'ni
2. teng'xun'hu'an'ying'ni
我们现在要求你计算出S的最小表示串(MPS),最小表示串就是,任何一种划分方式都可以看作是最小表示串上去掉若干个分隔符"'"得到,并且分隔符个数最少的一种表示。比如上面的第二种划分方式实际上就是该拼音串的MPS。再如"亲爱的"的拼音"qinaide"的MPS是"qi'n'ai'de"。因为可以这样划分:
1. qin'ai'de
2. qi'nai'de
Input
输入第一行包含两个整数N,M,N表示需要处理的拼音串的个数,M代表所有的合法音节的个数。1 ≤ N,M ≤ 1000
输入第二行是M个长度不超过6的合法音节,用空格分隔。
随后的N行,每行是一个长度不超过100000 (即105)的字母串, 全部由小写字母组成.
Output
输出为N行,对应要处理的拼音串的最小化分。用"'"来切分各个音节,不要包含如空格等任何其他字符。
如果输入的拼音串不能得到合法的切分,则该行输出"invalid"。
Sample Input
4 412
a ai an ang ao e ei en eng er o ou ba bai ban bang bao bei ben beng bi bian biao bie bin bing bo bu ca cai can cang cao ce cen ceng ci cong cou cu cuan cui cun cuo cha chai chan chang chao che chen cheng chi chong chou chu chua chuai chuan chuang chui chun chuo da dai dan dang dao de dei den deng di dia dian diao die ding diu dong dou du duan dui dun duo fa fan fang fei fen feng fiao fo fou fu ha hai han hang hao he hei hen heng hong hou hu hua huai huan huang hui hun huo ka kai kan kang kao ke kei ken keng kong kou ku kua kuai kuan kuang kui kun kuo ga gai gan gang gao ge gei gen geng gong gou gu gua guai guan guang gui gun guo ji jia jian jiang jiao jie jin jing jiong jiu ju juan jue jun la lai lan lang lao le lei leng li lia lian liang liao lie lin ling liu lo long lou lu luan lue lun luo lv na nai nan nang nao ne nei nen neng ni nian niang niao nie nin ning niu nong nou nu nuan nue nun nuo nv ran rang rao re ren reng ri rong rou ru ruan rui run ruo ma mai man mang mao me mei men meng mi mian miao mie min ming miu mo mou mu pa pai pan pang pao pei pen peng pi pian piao pie pin ping po pou pu qi qia qian qiang qiao qie qin qing qiong qiu qu quan que qun sa sai san sang sao se sen seng si song sou su suan sui sun suo sha shai shan shang shao she shei shen sheng shi shou shu shua shuai shuan shuang shui shun shuo ta tai tan tang tao te tei teng ti tian tiao tie ting tong tou tu tuan tui tun tuo wa wai wan wang wei wen weng wo wu xi xia xian xiang xiao xie xin xing xiong xiu xu xuan xue xun ya yan yang yao ye yi yin ying yo yong you yu yuan yue yun za zai zan zang zao ze zei zen zeng zi zong zou zu zuan zui zun zuo zha zhai zhan zhang zhao zhe zhei zhen zheng zhi zhong zhou zhu zhua zhuai zhuan zhuang zhui zhun zhuo
tengxunhuanyingni
qinaide
qqpinyin
sangeren
Sample Output
teng'xun'hu'an'ying'ni
qi'n'ai'de
invalid
san'g'e'r'en
[/code]
一直没有想到较好的算法,像高人请教!
...全文
392 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ganfengmzl 2009-08-01
  • 打赏
  • 举报
回复
呵呵
ageha67 2009-05-21
  • 打赏
  • 举报
回复
汗。。。QQ复赛题果然没那么容易。。。学习。。。。
无天 2009-05-19
  • 打赏
  • 举报
回复
顶一个
devildance 2009-05-19
  • 打赏
  • 举报
回复
kankan
hmsuccess 2009-05-19
  • 打赏
  • 举报
回复
谢谢,
绿色夹克衫 2009-05-19
  • 打赏
  • 举报
回复
好像用字母树+AC自动机也可以,网上资料挺多的,LZ可以搜索一下!
总的来说这道题属于说着简单做起来麻烦的!
绿色夹克衫 2009-05-19
  • 打赏
  • 举报
回复
题目稍微有些问题......并且分隔符个数最少的一种表示。比如上面的第二种划分方式实际上就是该拼音串的MPS
第二种分隔符好像更多呀!

看起来像有限状态机(非确定性有限状态机),可以转化为确定性有限状态机来做。(感觉像是在说绕口令)
可以看一下这个帖子,和这道题有点像,但MPS部分我想应该可以用一个类似DP的方法来做,当多种状态在同一个字符结束后,只记录分隔符最多的!

http://topic.csdn.net/u/20090317/12/6d7315a7-bad2-4a30-8f94-584afa40e00d.html

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧