QOJ.ac

QOJ

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

#20874. Il gene «vincente»

Statistics

Dopo anni a organizzare giochi e vedere Bessie arrivare prima di continuo, Farmer John capisce che non può essere un caso. Conclude che la vittoria deve essere codificata nel suo DNA e cerca questo gene «vincente».

Progetta una procedura per identificarne i possibili candidati. Il genoma di Bessie è una stringa $S$ di lunghezza $N$, dove $1 \leq N \leq 3000$. Sceglie una coppia $(K,L)$ con $1 \leq L \leq K \leq N$, indicando che i geni candidati avranno lunghezza $L$ e saranno cercati in una sottostringa più grande di lunghezza $K$. Prende tutte le sottostringhe di lunghezza $K$ di $S$, ciascuna chiamata $k$-mer. Per ogni $k$-mer esamina tutte le sottostringhe di lunghezza $L$ e sceglie la minima lessicograficamente come gene candidato (la più a sinistra in caso di parità). Poi aggiunge a un insieme $P$ la sua posizione iniziale $p_i$ in $S$, indicizzata a partire da $0$.

Poiché non ha ancora scelto $K$ e $L$, vuole sapere quanti candidati ci saranno per ogni coppia $(K,L)$.

Per ogni $v$ in $1\dots N$, aiutalo a determinare il numero di coppie $(K,L)$ con $|P|=v$.

Input

$N$ rappresenta la lunghezza della stringa e $S$ la stringa data. È garantito che tutti i caratteri siano maiuscoli, con $s_i \in A-Z$, perché la genetica bovina è molto più avanzata della nostra.

Output

Per ogni $v$ in $1\dots N$, stampa il numero di coppie $(K,L)$ con $|P|=v$, ciascun numero su una riga separata.

Esempi

Input 1

8
AGTCAACG

Output 1

11
10
5
4
2
2
1
1

Spiegazione

In questo caso, la terza riga dell'output vale 5 perché esistono esattamente 5 coppie di $K$ e $L$ che producono tre geni «vincenti» candidati. I candidati sono i seguenti ($p_i$ è indicizzato da $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]

Per vedere come (4,2) produce questi risultati, prendiamo tutti i $4$-mer:

AGTC
GTCA
TCAA
CAAC
AACG

Per ogni $4$-mer identifichiamo la sottostringa di lunghezza 2 minima lessicograficamente:

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

Aggiungiamo a un insieme $P$ le posizioni di queste sottostringhe nella stringa originale, ottenendo $P = [0,3,4]$.

Invece, la coppia $(4,1)$ produce solo $2$ geni «vincenti» candidati in totale. Prendendo tutti i $4$-mer e scegliendo la sottostringa di lunghezza $1$ minima lessicograficamente (usando A, A' e A* per distinguere le varie A), otteniamo:

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

Negli ultimi 3 casi A' e A* sono entrambe minime lessicograficamente, ma ha precedenza la sottostringa più a sinistra, quindi A' è l'unico candidato contato in tutti questi casi. Pertanto $P = [0,4]$.

Punteggio

  • Input 2-4: $N \leq 100$
  • Input 5-7: $N \leq 500$
  • Input 8-16: nessun vincolo aggiuntivo.

Autore del problema: 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.