QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 512 MB Total points: 100

#20874. “胜利”基因

Statistics

举办多年的比赛,眼看 Bessie 一次又一次获得第一名,Farmer John 意识到这不可能是巧合。他认定 Bessie 的 DNA 一定编码了胜利,因此开始寻找这一“胜利”基因。

他设计了一个寻找“胜利”基因候选者的过程。Bessie 的基因组是一个长度为 $N$ 的字符串 $S$,其中 $1 \leq N \leq 3000$。他选取一对 $(K,L)$,满足 $1 \leq L \leq K \leq N$,表示“胜利”基因候选者的长度为 $L$,并在一个更长的、长度为 $K$ 的子串中寻找。为识别基因,他取出 $S$ 中全部长度为 $K$ 的子串,称为 $k$-mer。对于每个 $k$-mer,他取出其中全部长度为 $L$ 的子串,把字典序最小的子串确定为一个胜利基因候选者(若有多个,则选最靠左的那个),然后将该子串在 $S$ 中的起始位置 $p_i$(从 $0$ 开始编号)加入集合 $P$。

由于他尚未选定 $K$ 和 $L$,他想知道每对 $(K,L)$ 会产生多少候选者。

对于 $1\dots N$ 中的每个 $v$,请帮他确定满足 $|P|=v$ 的 $(K,L)$ 对数。

输入格式

$N$ 表示字符串长度,$S$ 表示给定字符串。保证所有字符都是大写字母,即 $s_i \in A-Z$,因为牛的遗传学远比人类的先进。

输出格式

对于 $1\dots N$ 中的每个 $v$,输出满足 $|P|=v$ 的 $(K,L)$ 对数,每个数占一行。

样例

输入格式 1

8
AGTCAACG

输出格式 1

11
10
5
4
2
2
1
1

说明

在这个测试用例中,输出的第三行为 5,因为恰有 5 对 $K$ 和 $L$ 会产生三个“胜利”基因候选者。候选者如下($p_i$ 从 $0$ 开始编号):

(4,2) -> P = [0,3,4]
(5,3) -> P = [0,3,4]
(6,4) -> P = [0,3,4]
(6,5) -> P = [0,1,3]
(6,6) -> P = [0,1,2]

要看 (4,2) 如何得到这些结果,先取出全部 $4$-mer:

AGTC
GTCA
TCAA
CAAC
AACG

对于每个 $4$-mer,找出字典序最小的长度为 2 的子串:

AGTC -> AG
GTCA -> CA
TCAA -> AA
CAAC -> AA
AACG -> AA

取出这些子串在原字符串中的位置,加入集合 $P$,得到 $P = [0,3,4]$。

另一方面,若考察 $(4,1)$,则只会产生总共 $2$ 个“胜利”基因候选者。取出所有 $4$-mer 并找出字典序最小的长度为 $1$ 的子串(用 A、A' 和 A* 区分不同的 A),得到:

AGTC -> A
GTCA' -> A'
TCA'A* -> A'
CA'A*C -> A'
A'A*CG -> A'

在最后 3 种情况下,A' 和 A* 都是字典序最小的子串,但最靠左的子串优先,所以这些情况下都只有 A' 被算作候选者。因此 $P = [0,4]$。

子任务

  • 输入 2-4:$N \leq 100$
  • 输入 5-7:$N \leq 500$
  • 输入 8-16:没有额外限制。

题目作者:Suhas Nagar

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.