QOJ.ac

QOJ

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

#20874. 「勝利」の遺伝子

Statistics

長年ゲームを開催し、Bessie が何度も 1 位になるのを見て、Farmer John は偶然ではないと気付きました。Bessie の DNA には勝利が組み込まれているに違いないと考え、この「勝利」の遺伝子を探そうとします。

彼は「勝利」の遺伝子候補を見つける手順を考えました。Bessie のゲノムは長さ $N$ の文字列 $S$ で、$1 \leq N \leq 3000$ です。$1 \leq L \leq K \leq N$ を満たす組 $(K,L)$ を選びます。これは長さ $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

注記

このテストケースの出力の 3 行目は 5 です。3 つの「勝利」の遺伝子候補を与える $K$ と $L$ の組がちょうど 5 つあるためです。候補は次のとおりです($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.