Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | binsearch.in, binsearch.out | Sursă | EJOI 2021, ziua 2 |
Autor | Alexa Tudose | Adăugată de | |
Timp execuţie pe test | 0.5 sec | Limită de memorie | 262144 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Binsearch
bool binary_search(int n, int p[], int target){
int left = 1, right = n;
while(left < right){
int mid = (left + right) / 2;
if(p[mid] == target)
return true;
else if(p[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
if(p[left] == target) return true;
else return false;
}
Este bine ştiut faptul că dacă p este sortat, atunci codul returnează true dacă şi numai dacă target apare în p. Pe de altă parte, acest lucru poate să nu se întâmple dacă p nu este sortat.
Vi se dă un număr natural n şi o secvenţă b1,..., bn ∈ {true, false}. Se garantează că există un număr natural k pentru care n = 2k − 1. Trebuie să generaţi o permutare p a elementelor {1, . . . , n} care îndeplineşte anumite condiţii. Fie S(p) numărul de indici i ∈ {1,..., n} pentru care binary_search(n, p, i) nu returnează bi. Trebuie sa alegeţi p astfel încât S(p) este mic (aşa cum este detaliat în secţiunea "Restricţii").
(Notă: a permutare a mulţimii {1, . . . , n} este o secvenţa de n numere naturale care conţine fiecare numar natural de la 1 la n fix odată.)
Date de intrare
Fişierul de intrare binsearch.in ...
Date de ieşire
În fişierul de ieşire binsearch.out ...
Restricţii
- ... ≤ ... ≤ ...
Exemplu
binsearch.in | binsearch.out |
---|---|
This is some text written on multiple lines. | This is another text written on multiple lines. |
Explicaţie
...