Se consideră un șir a cu 2 * N elemente ale căror valori sunt numere întregi distincte, generate aleator, care nu sunt cunoscute. Se știe că atât primele N elemente ale șirului (cele de pe pozițiile 1, 2, ..., N), cât și ultimele N elemente ale acestuia (cele de pe pozițiile N + 1, N + 2, ..., 2 * N) sunt ordonate crescător.
Va trebui să determinați unul dintre indicii elementelor aflate pe pozițiile N sau N + 1 în șirul obținut prin ordonarea în ordine crescătoare a șirului a. Pentru determinarea acestui indice, puteți efectua un număr limitat de comparări între două elemente ale șirului a și aveți dreptul la două încercări de a "ghici" acest indice. Pentru aceasta aveți la dispoziție o bibliotecă externă care vă pune la dispoziție rutine pentru:
Pentru a putea folosi biblioteca va trebui să includeți în programul dumneavoastră instrucțiunea uses middle; pentru limbajul Pascal și #include "middle.h" pentru limbajul C/C++. În continuare sunt prezentate sintaxele funcțiilor și procedurilor incluse în biblioteci:
procedure Init; void Init() ![]() ![]() function Get2N:Integer; int Get2N() ![]() function GetNoComp:Integer; int GetNoComp() ![]() function IsGreater(i,j:Integer):Boolean; int IsGreater(int i,int j) ![]() ![]() procedure Result(x:Integer); void Result(int x) ![]() ![]() Toate funcțiile și procedurile (excepție: Init) întrerup execuția programului dacă sunt apelate înaintea inițializării. Programul vostru nu va citi datele din nici un fișier de intrare și nu va scrie date în nici un fișier de ieșire. ![]() ![]() ![]() Init - Get2N 6 GetNoComp 2 IsGreater(2,5) false (0) IsGreater(1,4) false (0) Result(5) - Result(4) - |