OP

Time limit: 1.25s Memory limit: 256MB Input: Output:

În urbea X au avut loc noi alegeri după ce Necromancerul a interferat cu buna desfășurare a primului tur. De data aceasta, KK candidați cu id-uri de la 11 la KK au concurat în alegeri, N+MN+M cetățeni votând fiecare cu exact unul dintre candidați.

După ce a făcut curățenie exemplară în dosarele primăriei, Hetty a fost desemnată numărător unic oficial de voturi. Numărătoarea voturilor se face pe parcursul a două zile.

În prima zi, Hetty primește NN buletine de vot. După ce le procesează, ea trebuie să arhiveze cele NN buletine și nu se va mai atinge de ele. Pentru a nota rezultatele după prima zi de numărătoare, Hetty are dreptul să scrie într-un caiet un șir BB de LL biți.

În a doua zi, Hetty primește următoarele MM buletine de vot, dar și caietul în care și-a scris șirul BB de LL biți. Folosind informația notată în caiet, Hetty trebuie să spună, după fiecare buletin de vot procesat, care este candidatul câștigător luând în considerare toate cele NN voturi din prima zi, dar și voturile din a doua zi procesate până la momentul respectiv.

Cerință

Aveți de implementat două funcții (care trebuie să se regăsească în această ordine) care vor fi rulate separat, și nu puteți folosi memoria globală pentru a transmite informații între apelurile funcției. Prima funcție va simula acțiunile lui Hetty din prima zi, iar a doua funcție va simula acțiunile lui Hetty din a doua zi.

std::string code(int K, int N, std::vector<int> ids);

Pentru prima funcție, veți primi numărul KK de candidați, numărul NN de voturi din prima zi, și un vector cu NN numere (toate șirurile sunt indexate începând de la 0) reprezentând id-urile candidaților cu care au votat primii NN cetățeni și va trebui să returnați un șir de caractere binar B, de lungime LL aleasă de voi.

std::vector<int> decode(int K, int N, int M, std::string B, std::vector<int> ids);

Pentru a funcție, veți primi numărul KK de candidați, numărul NN de voturi din prima zi, numărul MM de voturi din a doua zi, șirul BB de LL biți și MM numere reprezentând id-urile candidaților cu care au votat cei MM cetățeni din a doua zi. Trebuie sa returnați un șir ce conține id-urile candidatului câștigător după fiecare nou vot procesat.

Restricții și precizări

  • Un candidat câștigă dacă adună cele mai multe voturi dintre toți cei KK participanți.
  • Dacă există mai mulți candidați cu același număr maxim de voturi, poate fi afișat oricare.
  • Șirul de biți trebuie să conțină cel puțin un element.
  • Veți primi puncte doar dacă această lungime LL se încadrează într-o limită superioară LmaxL_{max} impusă.
  • Pentru 10%10\% din teste, 1KN101 \leq K \leq N \leq 10, M=100M = 100, Lmax=1 000L_{max} = 1\ 000
  • Pentru alte 20%20\% din teste, K=500K = 500, N=1 000N = 1\ 000, M=1 000 000M = 1\ 000\ 000, Lmax=1 600L_{max} = 1\ 600
  • Pentru alte 20%20\% din teste, K=500K = 500, N=1 000N = 1\ 000, M=1 000 000M = 1\ 000\ 000, Lmax=1 400L_{max} = 1\ 400
  • Pentru alte 25%25\% din teste, K=250K = 250, N=1 000N = 1\ 000, M=1 000 000M = 1\ 000\ 000, Lmax=950L_{max} = 950
  • Pentru alte 25%25\% din teste, K=1 500K = 1\ 500, N=5 000N = 5\ 000, M=1 000 000M = 1\ 000\ 000, Lmax=5 100L_{max} = 5\ 100
  • Singurele declarații permise în program sunt: directivele #include, #define (doar pentru constante numerice), using și declarații de funcții. Nu se pot declara variabile globale, statice sau să se returneze pointeri.

Exemplu

Se apelează hint(3, 5, {1, 1, 1, 3, 3}) și se returnează 01010101.
Apoi, se apelează solve(3, 5, 7, 01010101, {3, 3, 2, 2, 2, 2, 2}) care va returna {1, 3, 3, 3, 3, 3, 2}.

Explicații

După primul vot procesat, candidații 1 și 3 sunt la egalitate, așa că putem afișa oricare.
După următoarul vot, doar candidatul 3 este în frunte, și rămâne acolo pentru încă 3 voturi procesate
După penultimul vot, candidații 2 și 3 sunt la egalitate așa că putem afișa oricare.
După ultimul vot procesat, doar candidatul 2 este în frunte.

Log in or sign up to be able to send submissions!