#P1119. Start Up the Startup

Start Up the Startup

算法标签:

搜索

题解:

显然,经济很快就会再次复苏。作为一位有前瞻性的互联网企业家,你认为网络将需要一个新的搜索引擎,来服务所有购买新电脑的人。由于你对大多数搜索引擎产生的糟糕结果感到沮丧,所以你的搜索引擎将会更出色。

你想出了一种你认为具有创新性的文档匹配方法。通过考虑一个词在搜索字符串和被检查文档中出现的次数来赋予权重,你相信能够得出更准确的搜索结果。

你的程序将获得一个搜索字符串,随后是一组文档。你需要为每个文档计算得分,并按照文档在输入中出现的顺序将得分输出。为了计算一个文档的得分,你必须首先为出现在搜索字符串中的每个词计算词得分。词得分是一个词在搜索字符串中出现的次数乘以它在文档中出现的次数。文档得分是每个词得分的平方根之和。

输入

输入由一组文档组成,文档之间由仅包含十个短横线“-------- -”的单行分隔。任何一行的长度都不会超过250250个字符。任何一个文档的行数都不会超过100100行。第一个文档是搜索字符串。当连续出现两行十个短横线时,输入结束。

输入的文档将使用完整的ASCII字符集。你必须将每个文档解析为一组词。

在输入文档中,词由空白字符分隔。词之间的比较不区分大小写。在进行比较之前,标点符号会从词中去除,例如dont“don't”会变成dont“dont” 。得到的词应该只包含字符az,09{a-z,0-9}。在输入中仅由标点符号组成的词应该被忽略。你可以假设搜索字符串和每个文档至少有一个有效的词。

输出

输出是一系列得分,每行一个,保留两位小数。得分按照文档在输入中出现的顺序打印。输出中不应出现其他字符。

输入示例

fee fi fo fum 
---------- 
fee, fi, fo! fum!! 
---------- 
fee fee fi, me me me 
---------- 
---------- 

输出示例

4.00
2.41

来源

2001年大西洋中部地区竞赛