fbpx

Problema #1240 – Ab3 – Rezolvari PBInfo

de Mihai-Alexandru

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.000
  • 0 ≤ 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.000
  • 0 ≤ 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

S-ar putea sa iti placa