Time limit: 4s
Memory limit: 1024MB
Input:
Output:
Se dă un șir, , de mărime cu elemente din mulțimea . Definim funcția de compresie a unul șir astfel:
function compress(s)
stk ← []
for i ← 0 ... len(s) − 1 do
if s[i] = ultimul element din stk then
șterge ultimul element din stk
else
stk ← stk + s[i]
end if
end for
return len(stk)
end function
Cerință
Vom nota cu secvența contiguă a lui obținută prin eliminarea prefixului și a sufixului .
Să se calculeze
De vreme ce acest număr poate deveni foarte mare, se cere restul împărțirii sale la .
Detalii de implementare
Va trebui să implementezi funcția
std::uint64_t sum_compressed_lengths(std::vector<int> s, int M);
care:
- primește ca parametri șirul și , cu semnificația din enunț;
- returnează suma cerută modulo .
Comisia va apela funcția o singură dată per test.
Restricții și precizări
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 2 | |
| 2 | 3 | |
| 3 | 11 | |
| 4 | 13 | |
| 5 | 22 | |
| 6 | 49 | Fără restricții suplimentare. |
Exemplu
input
10 5
2 2 3 3 4 4 1 1 4 3
output
64