permut

Time limit: 0.5s Memory limit: 128MB Input: Output:

Nadejda și Zinaida se joacă un joc. În jocul lor, ele consideră o permutare p1,,pnp_1, \ldots, p_n, și un șir de numere întregi distincte a1,,ana_1, \ldots, a_n, ambele de lungime nn. Zinaida cunoaște atât șirul cât și permutarea --- pe când Nadejda nu le cunoaște.

În fiecare rundă a jocului, se întamplă două lucuri:

  • Nadejda o poate întreba pe Zinaida care este elementul aia_i.
  • Apoi, Zinaida aplică pemutarea pp asupra șirului aa --- adică, pentru fiecare i{1,,n}i \in \{ 1, \ldots, n \}, elementul aia_i se mută pe poziția pip_i.

Cerință

Scopul jocului este ca Nadejda să deducă atât permutarea pp cât și șirul inițial aa, folosind cât mai puține întrebări. O puteți ajuta pe Nadejda să câștige?

Protocol de interacțiune

Această problemă este interactivă! Se citește numărul nn prin std::cin. Pentru a-i pune o întrebare Zinaidei, trebuie să afișați pe o linie folosind std::cout:

? i\text{\texttt{? i}}

urmat de un std::endl. După care se citește răspunsul la întrebare folosind std::cin. Dacă acesta este -1, întrebarea a fost invalidă, și trebuie să apelați funcția exit(0) pentru a putea primi verdictul corect (altfel, este posibil să primiți verdictul Execution killed).

După ce ați aflat permutarea și șirul, puteți să-i răspundeți Zinaidei prin a afișa pe o singură linie folosind std::cout:

! p[1] p[2] ... p[n] a[1] a[2] ... a[n]\text{\texttt{! p[1] p[2] ... p[n] a[1] a[2] ... a[n]}}

urmat, desigur, de un std::endl.

Restricții și precizări

  • 1n2  0001 \leq n \leq 2 \; 000
  • 1ai100  0001 \leq a_i \leq 100 \; 000
# Scor Restricții
1 4 pi=ip_i = i
2 8 nn par, iar {p2i,p2i+1}={2i,2i+1}\{p_{2i}, p_{2i+1}\} = \{2i, 2i+1\} *
3 19 p=ap = a
4 69 Fără restricții suplimentare

*Spre exemplu, p3=3p_3 = 3 și p4=4p_4 = 4 sau p3=4p_3 = 4 și p4=3p_4 = 3.

Punctare

Pentru un test ce valorează xx puncte, dacă soluția voastră efectuează kk întrebări, punctajul obținut va fi xmin(1.0,e(kn2))x \cdot \text{min}(1.0, e^{-(\frac{k}{n} - 2)}).

Pentru mai mult de 10nn întrebări se va acorda verdictul Too many queries.

De asemenea, în cazul în care ghiciți permutarea sau șirul dar nu pe amândouă, veți primi jumătate din punctajul dat de formula de mai sus (și un verdict corespunzător).

Exemple

Input Ouptut Explanation
3 Permutarea Zinaidei este 2 1 3, iar șirul inițial este 67 420 1
? 1
67 a[1] = 67. Șirul se permută la 420 67 1.
? 2
67 a[2] = 67. Șirul se permută la 67 420 1.
? 3
1 a[3] = 1. Șirul se permută la 420 67 1.
? 1
420 a[1] = 420. Șirul se permută la 67 420 1.
? 3
1 a[3] = 1. Nadejda deduce atât permutarea, cât și șirul ascuns.
! 2 1 3 67 420 1 Hooray!

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