#P1007. The 'Winning' Gene
The 'Winning' Gene
USACO 2024 US Open Contest, Silver - Problem 3: The 'Winning' Gene
注意:此问题的内存限制为512MB,是默认值的两倍。
问题描述
多年来举办比赛并看着Bessie一次又一次获得第一名后,Farmer John意识到这不可能是偶然的。相反,他得出结论,Bessie的DNA中一定编码了“获胜”基因,于是他着手寻找这个“获胜”基因。
他设计了一个过程来确定这个“获胜”基因的可能候选者。他获取Bessie的基因组,这是一个长度为()的字符串。他选择一些数对,其中,表示“获胜”基因候选者的长度为,并且将在长度为的较大子串中找到。为了识别基因,他从中取出所有长度为的子串(我们称之为-mer)。对于给定的-mer,他取出所有长度为的子串,确定字典序最小的子串作为获胜基因候选者(如果有平局则选择最左边的子串),然后将该子串在中的0索引位置写入集合。
由于他还没有选择和,他想知道对于每一对会有多少个候选者。
对于中的每个,帮助他确定满足的对数。
输入格式(从终端/标准输入读取输入)
- :表示字符串的长度。
- :表示给定的字符串。所有字符保证为大写字母,即,因为牛的遗传学比我们的先进得多。
输出格式(将输出打印到终端/标准输出)
对于中的每个,输出满足的对数,每个数字占一行。
示例输入
8
AGTCAACG
示例输出
11
10
5
4
2
2
1
1
解释
在这个测试用例中,输出的第三行是5,因为我们看到恰好有5对和允许有三个“获胜”基因候选者。这些候选者(其中是0索引)为:
为了了解如何得到这些结果,我们取所有4 - mer:
AGTC
GTCA
TCAA
CAAC
AACG
对于每个4 - mer,我们确定字典序最小的长度为2的子串:
AGTC -> AG
GTCA -> CA
TCAA -> AA
CAAC -> AA
AACG -> AA
我们取所有这些子串在原始字符串中的位置并将它们添加到集合中,得到。
另一方面,如果我们关注数对,我们看到这只会导致总共2个“获胜”基因候选者。如果我们取所有4 - mer并确定字典序最小的长度为1的子串(使用、和来区分不同的),我们得到:
AGTC -> A
GTCA' -> A'
TCA'A* -> A'
CA'A*C -> A'
A'A*CG -> A'
虽然在最后三种情况下和在字典序上都是最小的,但最左边的子串优先,所以在所有这些情况下被计为唯一的候选者。这意味着。
评分
- 输入2 - 4:
- 输入5 - 7:
- 输入8 - 16:无额外限制。
问题提供者:Suhas Nagar