platou

Time limit: 0.1s Memory limit: 8MB Input: Output:

Se consideră un şir de 1 048 5761 \ 048 \ 576 (220)(2^{20}) elemente care sunt numere întregi. Se definesc noţiunile:

  • platou ca fiind o secvenţă de elemente egale aflate în vector în poziţii consecutive;
  • lungimea unui platou ca fiind numărul de elemente care alcătuiesc un platoul.

Se ştie că în şirul considerat, lungimea maximă a unui platou este 81928192 (213)(2^{13}) şi că există cel puţin un platou care are această lungime. Amplasarea unui platou este determinată de poziţia cea mai mică şi de poziţia cea mai mare dintre poziţiile elementelor care alcătuiesc platoul.

Cerinţă

Să se scrie un program care determină amplasarea unui platou de lungime 81928192 în şirul considerat. Dumneavoastră nu cunoaşteţi şirul. Determinarea amplasării platoului se face adresând întrebări comisiei. O întrebare constă în a preciza două poziţii din şir, fie acestea p1p_1 şi p2p_2. Comisia vă dă un răspuns care reprezintă lungimea cea mai mare a unui platou din şir aflat între poziţiile p1p_1 şi p2p_2.

Interacţiune

Programul vostru nu va citi sau scrie din/în niciun fişier și nu va implementa funcția main. În schimb, va avea de implementat funcția

std::pair<int, int> solve();

ce va returna o pereche (p1,p2)(p_1, p_2) unde p1p_1 şi p2p_2 reprezintă poziţiile ce determină amplasarea unui platou de lungime 81928192 din şir.
Pentru a afla detalii despre șirul considerat puteți apela funcția

int ask(int p1, int p2);

unde p1p_1, p2p_2 reprezintă poziţiile pentru care faceţi interogarea și funcția returnează o valoare care reprezintă lungimea cea mai mare a unui platou aflat între poziţiile p1p_1 şi p2p_2.

Restricții și precizări

  • Poziţiile din şir sunt numerotate de la 11 la 1 048 5761 \ 048 \ 576.
  • Fișierul platou.h trebuie inclus
  • Se garantează că veți primi răspunul la 2020 de întrebări fără a ieși din limita de timp

Punctaj

Programul vostru obţine 00 puncte la un test dacă:

  • utilizează mai mult de 2020 interogări;
  • interoghează cu poziţii incorecte: poziţii mai mici decât 11 sau mai mari decât 1 048 5761 \ 048 \ 576 sau prima poziţie e mai mare strict decât a doua poziţie.
  • returnează un răspuns greșit

Altfel, programul vostru obţine pentru un punctaj care depinde de numărul de întrebări după cum urmează :

  • pentru cel mult 1111 întrebări obţine 100%100\% din punctaj;
  • pentru un număr de întrebări cuprins între 1212 şi 1515 obţine 50%50\% din punctaj;
  • pentru un număr de întrebări cuprins între 1616 şi 2020 obţine 25%25\% din punctaj.

Exemplu

  • Se apelează ask(1, 8192), interoghez lungimea maximă a unui platou întâlnită între poziţiile 11 şi 81928192
  • Funcția returnează 81928192, semnificând că lungimea maximă este 81928192.
  • solve returnează (1,8192)(1, 8192), deoarece știm că un platou cu lungime de 81928192 se află între poziţiile 11 şi 81928192

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