ConcursC++17

Sirag

Fie un șir de caractere SS de lungime NN format din litere mici ale alfabetului englez. Pentru un KK oarecare (K≥1K \geq 1), alegem KK poziții 1≤i1<i2<i3<⋯<iK<N1 \leq i_1 < i_2 < i_3 < \dots < i_K < N în care să tăiem șirul, rezultând K+1K + 1 șiruri, pe care le notăm cu T1,…,TK+1T_1, \ldots, T_{K + 1}, astfel:

T1=S1 S2 … Si1T2=Si1+1 Si1+2 … Si2⋮⋮⋮TK+1=Sik+1 Sik+2 … SN\begin{matrix} T_1 & = & S_1\, S_2\, \ldots\, S_{i_1} \\ T_2 & = & S_{i_1 + 1} \, S_{i_1 + 2}\, \ldots\, S_{i_2} \\ \vdots & \vdots & \vdots \\ T_{K + 1} & = & S_{i_k + 1} \, S_{i_k + 2}\, \ldots \, S_N \end{matrix}

Șirurile T1,…,TK+1T_1, \ldots, T_{K + 1} pot avea lungimi diferite.

Fie CiC_i mulțimea caracterelor ce apar în TiT_i. Spunem că o tăiere este echilibrată dacă ∣C1∣=∣C2∣=⋯=∣CK+1∣|C_1| = |C_2| = \cdots = |C_{K + 1}| --- adică fiecare dintre șirurile T1,…,Tk+1T_1, \ldots, T_{k + 1} conține la fel de multe caractere distincte.

Cerință

Considerăm toate subsecvențele șirului SS și pentru fiecare calculăm numărul de moduri de a o tăia echilibrat (în cel puțin două bucăți). Să se afișeze suma rezultatelor pentru toate subsecvențele modulo 1 000 000 0071 \ 000 \ 000 \ 007.

Date de intrare

Fișierul de intrare sirag.in conține pe prima linie un număr natural NN, lungimea lui SS. Pe a doua linie, se află șirul de caractere SS.

Date de ieșire

Pe prima linie a fișierului de ieșire sirag.out se va scrie suma cerută modulo 1 000 000 0071 \ 000 \ 000 \ 007.

Restricții și precizări

  • 1≤N≤1 000 0001 \leq N \leq 1 \ 000 \ 000
#ScorRestricții
114S1=⋯=SNS_1 = \cdots = S_N
27Toate caracterele care apar în SS sunt distincte
311N≤300N \leq 300
410N≤2 000N \leq 2 \ 000
515N≤7 000N \leq 7 \ 000
612N≤100 000N \leq 100 \ 000
731Fără restricții adiționale

Exemplul 1

sirag.in

3
aaa

sirag.out

5

Explicație

Subsecvențele lui SS sunt:

  • aaa - poate fi tăiat într-un singur mod pentru K=1K = 1;
  • aaa - poate fi tăiat într-un singur mod pentru K=1K = 1;
  • aaa - poate fi tăiat în 22 moduri pentru K=1K = 1 și un singur mod pentru K=2K = 2.

Exemplul 2

sirag.in

6
aabbaa

sirag.out

43

Exemplul 3

sirag.in

20
aababbababbababhhsse

sirag.out

7027

Sursă și autori

ONI 2025, clasele 10. Livia Măgureanu, Tamio Vesa-Nakajima.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑