278
Cerința
Se se determine pentru n numere a valoarea b maximă astfel încât b3 + 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.0000 ≤ a ≤ 1018- Pentru
40%din teste, se garantează căn * b ≤ 106 - Atenție la limita de memorie!
Exemple:
ab3.in
5 1 9 36 27 89
ab3.out
0 1 3 2 4
Explicație
13 + 1 = 2
Cerința
Se se determine pentru n numere a valoarea b maximă astfel încât b3 + 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.0000 ≤ a ≤ 1018- Pentru
40%din teste, se garantează căn * b ≤ 106 - Atenție la limita de memorie!
Exemple:
ab3.in
5 1 9 36 27 89
ab3.out
0 1 3 2 4
Explicație
13 + 1 = 2
23 + 2 = 10
33 + 3 = 30
43 + 4 = 68
53 + 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;
}
Comentarii