2463 - Inequation
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>
- 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>