majoritar

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

Comisia a ascuns un șir AA format din NN numere naturale. Se garantează că șirul admite un element majoritar (un element care apare de strict mai mult de N/2\lfloor N / 2 \rfloor ori în șir).

Fiindcă elementul majoritar din șirul inițial este prea evident, Comisia vă cere să aflați un indice (o poziție) la care se află acesta, cât și frecvența cu care el apare în șirul ascuns AA. Pentru a face asta, puteți interacționa cu programul comisiei. La o întrebare, puteți alege un subșir de indici și puteți întreba dacă elementele de la acele poziții admit, la rândul lor, un element majoritar sau nu.

Protocol de interacțiune

Puteți pune întrebări afișând pe o linie folosind std::cout (urmat de std::cout << std::endl):

? K i1 i2iK\text{\texttt{? K }} i_1 \text{ } i_2 \dots i_K

Aici KK (1KN1 \leq K \leq N) reprezintă numărul de indici interogați, iar i1,i2iKi_1, i_2 \dots i_K (1ijN1 \leq i_j \leq N) trebuie să fie indici distincți.

Pentru fiecare întrebare, Comisia va răspunde la intrarea standard cu un număr pe o linie nouă:

  • 1: Elementele aflate la indicii interogați admit un element majoritar.
  • 0: Elementele aflate la indicii interogați nu admit un element majoritar.
  • -1: Ați pus o întrebare invalidă, ați interogat aceiași indici de mai multe ori într-un query, sau ați depășit limita maximă absolută de întrebări. (În acest caz, programul vostru trebuie să se oprească imediat pentru a primi Wrong Answer, altfel riscați Time Limit Exceeded).

Când sunteți siguri de răspuns, trebuie să afișați pe o linie folosind std::cout (urmat de std::cout << std::endl):

! I F\texttt{! I F}

unde II reprezintă un indice (orice valoare validă între 11 și NN) la care se află elementul majoritar, iar FF reprezintă frecvența (numărul de apariții) acestuia în șirul inițial AA. Aici se termină interacțiunea.

Punctare

Fie QQ numărul de întrebări de tip ? puse de programul vostru.

Dacă interacțiunea este invalidă sau programul nu afișează un răspuns corect, punctajul pe test este 0.

În caz contrar, punctajul pe un test se acordă astfel:

  • Dacă QN+50Q \leq N + 50, veți primi 100% din punctajul testului.
  • Dacă N+50<Q2N+50N + 50 < Q \leq 2N + 50, punctajul este 100%40%Q(N+50)N.100\% - 40\% \cdot \frac{Q - (N + 50)}{N}.
  • Dacă 2N+50<QNlog2N+502N + 50 < Q \leq N \cdot \lceil \log_2 N \rceil + 50, veți primi 40% din punctajul testului.
  • Dacă Q>Nlog2N+50Q > N \cdot \lceil \log_2 N \rceil + 50, dar programul afișează răspunsul corect în limita de timp, veți primi 20% din punctajul testului.

Date de intrare și ieșire

Pe prima linie a datelor de intrare veți primi numărul NN. Apoi, programul vostru trebuie să citească răspunsurile pentru fiecare întrebare pusă. Toate întrebările se vor afișa la datele de ieșire, respectând formatul precizat în secțiunea Protocol de interacțiune. Nu uitați să afișați la final răspunsul sub forma ! I F.

Restricții

  • 1N10 0001 \leq N \leq 10 \ 000
  • NU se garantează evaluarea în limita de timp a soluției dacă numărul total de elemente interogate este mai mare decât 41054 \cdot 10^5.
# Scor Restricții
1 19 N20N \leq 20
2 42 N1 000N \leq 1 \ 000
3 23 N5 000N \leq 5 \ 000
4 16 Fără alte restricții

Exemple

Input Ouptut Explanation
5 Șirul ascuns de comisie este A=[3,3,2,4,3]A = [3, 3, 2, 4, 3]. N=5N = 5.
? 3 1 2 3 Concurentul întreabă indicii 1, 2 și 3 (A1=3,A2=3,A3=2A_1=3, A_2=3, A_3=2).
1 Există majoritar (elementul 3).
? 3 3 4 5 Concurentul întreabă indicii 3, 4 și 5 (A3=2,A4=4,A5=3A_3=2, A_4=4, A_5=3).
0 Nu există un element majoritar.
? 4 1 2 4 5 Concurentul întreabă indicii 1, 2, 4 și 5 (A1=3,A2=3,A4=4,A5=3A_1=3, A_2=3, A_4=4, A_5=3)
1 Există majoritar (elementul 3).
! 1 3 În urma acestor deducții, concurentul este sigur că elementul majoritar se află (printre altele) la indicele 1 și că el apare de 3 ori în tot șirul.

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