Cerința
Se se determine pentru n
numere a
valoarea b
maximă astfel încât b
3
+ b ≤ a
.
Date de intrare
Fișierul de intrare ab3.in
conține pe prima linie numărul n
, iar pe următoarele n
linii câte un număr a
.
Date de ieșire
Fișierul de ieșire ab3.out
va conține n
linii cu câte un număr fiecare, răspunsul la fiecare întrebare.
Restricții și precizări
1 ≤ n ≤ 100.000
0 ≤ a ≤ 10
18
- Pentru
40%
din teste, se garantează căn * b ≤ 10
6
- Atenție la limita de memorie!
Exemple:
ab3.in
5 1 9 36 27 89
ab3.out
0 1 3 2 4
Explicație
1
3
+ 1 = 2
Cerința
Se se determine pentru n
numere a
valoarea b
maximă astfel încât b
3
+ b ≤ a
.
Date de intrare
Fișierul de intrare ab3.in
conține pe prima linie numărul n
, iar pe următoarele n
linii câte un număr a
.
Date de ieșire
Fișierul de ieșire ab3.out
va conține n
linii cu câte un număr fiecare, răspunsul la fiecare întrebare.
Restricții și precizări
1 ≤ n ≤ 100.000
0 ≤ a ≤ 10
18
- Pentru
40%
din teste, se garantează căn * b ≤ 10
6
- Atenție la limita de memorie!
Exemple:
ab3.in
5 1 9 36 27 89
ab3.out
0 1 3 2 4
Explicație
1
3
+ 1 = 2
2
3
+ 2 = 10
3
3
+ 3 = 30
4
3
+ 4 = 68
5
3
+ 5 = 130
#include <bits/stdc++.h> using namespace std; ifstream cin ("ab3.in"); ofstream cout ("ab3.out"); unsigned long long cautare(unsigned long long x , unsigned long long st , unsigned long long dr) { unsigned long long mij = (st + dr) / 2; if(x == 1) return 0; if(mij * mij * mij + mij == x || (mij * mij * mij + mij < x && (mij + 1) * (mij + 1) * (mij + 1) + (mij + 1) > x)) return mij; if(mij * mij * mij + mij < x) return cautare(x , mij + 1 , dr); if(mij * mij * mij + mij > x) return cautare(x , st , mij - 1); } int main() { unsigned long long n , x; cin >> n; for(int i = 1 ; i <= n ; i++) { cin >> x; cout << cautare(x , 1 , 1000000000) << '\n'; } return 0; }