QOJ.ac

QOJ

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

#20874. Das „Gewinner“-Gen

Statistics

Nachdem Farmer John jahrelang Spiele veranstaltet und Bessie immer wieder den ersten Platz belegen gesehen hat, erkennt er, dass dies kein Zufall sein kann. Er schließt daraus, dass das Gewinnen in ihrer DNA codiert sein muss, und sucht dieses „Gewinner“-Gen.

Er entwickelt ein Verfahren, um mögliche Kandidaten für dieses Gen zu bestimmen. Bessies Genom ist eine Zeichenkette $S$ der Länge $N$ mit $1 \leq N \leq 3000$. Er wählt ein Paar $(K,L)$ mit $1 \leq L \leq K \leq N$. Die Genkandidaten sollen Länge $L$ haben und in einem größeren Teilstring der Länge $K$ gefunden werden. Er betrachtet alle Teilstrings der Länge $K$ von $S$, die wir jeweils einen $k$-mer nennen. Für jeden $k$-mer betrachtet er alle Teilstrings der Länge $L$ und wählt den lexikographisch kleinsten als Genkandidaten (bei Gleichstand den am weitesten links liegenden). Dann fügt er dessen Startposition $p_i$ in $S$, mit Indizes ab $0$, einer Menge $P$ hinzu.

Da er $K$ und $L$ noch nicht gewählt hat, möchte er die Anzahl der Kandidaten für jedes Paar $(K,L)$ kennen.

Hilf ihm, für jedes $v$ in $1\dots N$ die Anzahl der Paare $(K,L)$ mit $|P|=v$ zu bestimmen.

Eingabe

$N$ bezeichnet die Länge der Zeichenkette und $S$ die gegebene Zeichenkette. Alle Zeichen sind garantiert Großbuchstaben mit $s_i \in A-Z$, da die Rindergenetik viel weiter fortgeschritten ist als unsere.

Ausgabe

Gib für jedes $v$ in $1\dots N$ die Anzahl der Paare $(K,L)$ mit $|P|=v$ aus, jeweils in einer eigenen Zeile.

Beispiele

Eingabe 1

8
AGTCAACG

Ausgabe 1

11
10
5
4
2
2
1
1

Hinweis

Die dritte Ausgabezeile dieses Testfalls ist 5, weil genau 5 Paare von $K$ und $L$ drei „Gewinner“-Genkandidaten ergeben. Diese Kandidaten sind folgende ($p_i$ ist ab $0$ indiziert):

(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]

Um zu sehen, wie (4,2) diese Ergebnisse liefert, betrachten wir alle $4$-mer:

AGTC
GTCA
TCAA
CAAC
AACG

Für jeden $4$-mer bestimmen wir den lexikographisch kleinsten Teilstring der Länge 2:

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

Wir fügen die Positionen dieser Teilstrings in der ursprünglichen Zeichenkette einer Menge $P$ hinzu und erhalten $P = [0,3,4]$.

Das Paar $(4,1)$ ergibt dagegen insgesamt nur $2$ „Gewinner“-Genkandidaten. Wenn wir alle $4$-mer betrachten und jeweils den lexikographisch kleinsten Teilstring der Länge $1$ bestimmen (mit A, A' und A* zur Unterscheidung verschiedener A), erhalten wir:

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

In den letzten 3 Fällen sind A' und A* beide lexikographisch minimal, aber der am weitesten links liegende Teilstring hat Vorrang. Deshalb zählt jeweils nur A' als Kandidat. Somit ist $P = [0,4]$.

Teilaufgaben

  • Eingaben 2-4: $N \leq 100$
  • Eingaben 5-7: $N \leq 500$
  • Eingaben 8-16: keine zusätzlichen Einschränkungen.

Aufgabenautor: 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.