2463 - Inequation

From Bitnami MediaWiki

Cerința[edit | edit source]

Această problemă nu are o descriere plicticoasă, menită să vă încurce.Trebuie doar să aflați cel mai mare număr natural n, astfel încât b^0+b^1+...+b^n≤y, unde b și y sunt valori cunoscute.

Date de intrare[edit | edit source]

Fișierul de intrare inequationin.txt va conține pe prima linie numărul t, reprezentând numărul de teste ale problemei.Apoi urmează 3*t rânduri, pentru fiecare test fiind precizată baza b, numărul de cifre ale lui y, precum și cifrele numărului y, aflate fiecare pe un rând separat.

Date de ieșire[edit | edit source]

Fișierul de ieșire inequationout.txt va conține pe linia i numărul maxim de termeni pentru care se respectă condiția pentru testul cu numărul de ordine t.

Restricții și precizări[edit | edit source]

  • 1 ⩽ b ⩽ 100
  • numărul de cifre ale lui y ⩽ 25.000

Exemplul 1[edit | edit source]

Intrare
inequationin.txt
1
2
2
16
Ieșire
Datele de intrare corespund restricțiilor impuse
inequationout.txt
4

Explicație[edit | edit source]

2^0+2^1+2^2+2^3=15≤16, deci în total patru termeni.

Exemplul 2[edit | edit source]

Intrare
inequationin.txt
1
101
2
16
Ieșire
Datele de intrare NU corespund restricțiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 2463 - Inequation

def validare_date(b, y):

   if not (1 <= b <= 100):
       return False
   if not (1 <= len(y) <= 25000):
       return False
   if not all(0 <= int(cifra) <= 9 for cifra in y):
       return False
   return True


def calculeaza_numar_maxim_termeni(b, y):

   suma = 0
   numar_termeni = 0
   i = 0
   while suma + b ** i <= int(y):
       suma += b ** i
       numar_termeni += 1
       i += 1
   return numar_termeni


def main():

   with open("inequationin.txt", "r") as file_input:
       t = int(file_input.readline().strip())
       for _ in range(t):
           b = int(file_input.readline().strip())
           lungime_y = int(file_input.readline().strip())
           y = file_input.readline().strip()
           if validare_date(b, y):
               print("Datele de intrare corespund restricțiilor impuse")
               rezultat = calculeaza_numar_maxim_termeni(b, y)
               with open("inequationout.txt", "w") as file_output:
                   file_output.write(str(rezultat) + "\n")
           else:
               print("Datele de intrare NU corespund restricțiilor impuse")


if __name__ == "__main__":

   main()

</syntaxhighlight>