Informatică, întrebare adresată de Robys, 8 ani în urmă

#1240 Ab3
// Rezolvare cu cautare binara
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

Răspunsuri la întrebare

Răspuns de Mrincredible
2

#include <bits/stdc++.h>

using namespace std ;

ifstream in ("ab3.in") ;

ofstream out ("ab3.out") ;

unsigned long long int Caut(unsigned long long int a, unsigned long long int st, unsigned long long int dr) {

   unsigned long long int mij = (st + dr) / 2 ;

   if (a == 1)

       return 0 ;

   if (mij * mij * mij + mij == a || (mij * mij * mij + mij < a && (mij + 1) * (mij + 1) * (mij + 1) + mij + 1 > a))

       return mij ;

   if (mij * mij * mij + mij < a)

       return Caut(a, mij + 1, dr) ;

   if (mij * mij * mij + mij > a)

       return Caut(a, st, mij - 1) ;

}

int main() {

   unsigned long long int n, a, ans, i ;

   in >> n ;

   for (i = 1 ; i <= n ; ++ i) {

       in >> a ;

       ans = Caut(a, 1, 1000000000) ;

       out << ans << '\n' ;

   }

   return 0 ; ///100p pe pbinfo

}


Robys: Acum observ ce am facut gresit. Multumesc frumos!
Mrincredible: cp
Alte întrebări interesante