# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
143153 | mariusnicoli | Mate (COCI18_mate) | C++14 | 543 ms | 53552 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/**
La aceasta problema numarul de interogari este foarte mare, ceea ce ne duce
cu gandul sa precalculam rezultatele pentru a putea raspunde in o(1)
vom face asta in vectorul sol
sol[L][p-'a'][u-'a'] = cate cuvinte de lungime L au penultima litera
a p-a a alfabetului si ultima litera a u-a. Apar mai sus constructiile -'a'
pentru ca noi vom tine a doua si a treia dimensiune intre 0 si 25.
In prima etapa vom calcula D[i][j][k] = cate cuvinte incep de la pozitia i
sau dupa ea si care se termina in literele jk, in aceasta ordine.
Trebuie sa intelegem bine semnificatia dinamicelor:
- la sol primul indice este lungime de cuvant iar la D el este pozitie din srul dat
- la sol al doilea si al treile a indice reprezinta litere ale alfabetului si nu pozitii
Calculam intai pe D si apoi vom vedea cum il folosim pentru a obtine pe sol
Pentru calculul lui D parcurgem cu i indicii din sirul dat invers
si daca la pozitia i avem litera j, D[i][j][ultima] = D[i][j+1][ultima] + R[i+1][ultima]
unde R[i+1][ultima] = de cate ori apare litera "ultima" dupa pozitia j
Pe R il calculam tot invers, R[i][ultima] = 1 = R[i+1][ultima], daca s[i] = ultima
si R[i][ultima] = R[i+1][ultima] in caz contrar.
Semnificatia formulei de mai sus pentru D este ca daca la pozitia i este
chiar litera j, ne intereseaza de cate ori apare litera ultima dupa pozitia curenta,
acesta fiind numarul de perechi noi de forma j, ultima (nu uitam ca pepozitia i este litera j) care se adauga
In celalalt caz,D[i][j][ultima] = D[i+1][j][ultima], deci ce vine din urma
Asa calculat D, sa vedem cum il obtinem pe sol.
pentru sol[L][p][u], ne-ar interesa aparitiile in sirul s ale literei p.
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |