2017 - P2017: Difference between revisions
Pagină nouă: == Cerința == Să se răspundă la Q întrebări de forma: “Care este numărul natural minim x astfel încât cifra c să apară de cel puțin K ori în reprezentarea tuturor numerelor naturale nenule mai mici sau egale cu x?” == Date de intrare == Fișierul de intrare 2017.in conține pe prima linie numărul Q, iar pe următoarele Q linii se află câte două numere naturale c și K separate printr-un spațiu, reprezentând întrebările. == Date de ieșire == Fișier... |
No edit summary |
||
Line 3: | Line 3: | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare | Fișierul de intrare 2017in.txt conține pe prima linie numărul Q, iar pe următoarele Q linii se află câte două numere naturale c și K separate printr-un spațiu, reprezentând întrebările. | ||
== Date de ieșire == | == Date de ieșire == | ||
Fișierul de ieșire | Fișierul de ieșire 2017out.txt va conține Q linii, pe linia i aflându-se răspunsul la întrebarea i. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
Line 15: | Line 15: | ||
== Exemplu 1 == | == Exemplu 1 == | ||
; Intrare | ; Intrare | ||
; | ; 2017in.txt | ||
: 5 | : 5 | ||
: 1 7 | : 1 7 | ||
Line 23: | Line 23: | ||
: 6 13 | : 6 13 | ||
; Ieșire | ; Ieșire | ||
; | ; 2017out.txt | ||
: 14 | : 14 | ||
: 45 | : 45 | ||
Line 32: | Line 32: | ||
== Exemplu 2 == | == Exemplu 2 == | ||
; Intrare | ; Intrare | ||
; | ; 2017in.txt | ||
: 5 | : 5 | ||
: 10 7 | : 10 7 | ||
Line 40: | Line 40: | ||
: 6 13 | : 6 13 | ||
; Ieșire | ; Ieșire | ||
; | ; 2017out.txt | ||
: Date invalide | : Date invalide | ||
: 45 | : 45 | ||
Line 82: | Line 82: | ||
with open(" | with open("2017in.txt", "r") as f: | ||
numar_intrebari = int(f.readline().strip()) | numar_intrebari = int(f.readline().strip()) | ||
intrebari = [list(map(int, f.readline().strip().split())) for _ in range(numar_intrebari)] | intrebari = [list(map(int, f.readline().strip().split())) for _ in range(numar_intrebari)] | ||
Line 90: | Line 90: | ||
with open(" | with open("2017out.txt", "w") as f: | ||
for rezultat in rezultate: | for rezultat in rezultate: | ||
f.write(str(rezultat) + "\n") | f.write(str(rezultat) + "\n") | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 17:12, 1 December 2023
Cerința
Să se răspundă la Q întrebări de forma: “Care este numărul natural minim x astfel încât cifra c să apară de cel puțin K ori în reprezentarea tuturor numerelor naturale nenule mai mici sau egale cu x?”
Date de intrare
Fișierul de intrare 2017in.txt conține pe prima linie numărul Q, iar pe următoarele Q linii se află câte două numere naturale c și K separate printr-un spațiu, reprezentând întrebările.
Date de ieșire
Fișierul de ieșire 2017out.txt va conține Q linii, pe linia i aflându-se răspunsul la întrebarea i.
Restricții și precizări
- 1 ⩽ Q ⩽ 10.000
- 1 ⩽ c ⩽ 9
- 1 ⩽ K ⩽ 10^12
Exemplu 1
- Intrare
- 2017in.txt
- 5
- 1 7
- 5 5
- 5 11
- 1 1
- 6 13
- Ieșire
- 2017out.txt
- 14
- 45
- 55
- 1
- 66
Exemplu 2
- Intrare
- 2017in.txt
- 5
- 10 7
- 5 5
- 5 11
- 1 1
- 6 13
- Ieșire
- 2017out.txt
- Date invalide
- 45
- 55
- 1
- 66
Rezolvare
<syntaxhighlight lang="python" line>
- 2017 - P2017
def validare_date(cifra, numar_aparitii):
if 1 <= cifra <= 9 and 1 <= numar_aparitii <= 10 ** 12: return True return False
def gaseste_numarul_minim(cifra, numar_aparitii):
numar = 1 aparitii = 0
while aparitii < numar_aparitii: str_numar = str(numar) aparitii += str_numar.count(str(cifra)) numar += 1
return numar - 1
def rezolva_problema(numar_intrebari, intrebari):
rezultate = []
for i in range(numar_intrebari): cifra, numar_aparitii = intrebari[i]
if validare_date(cifra, numar_aparitii): rezultat = gaseste_numarul_minim(cifra, numar_aparitii) rezultate.append(rezultat) else: rezultate.append("Date invalide")
return rezultate
with open("2017in.txt", "r") as f:
numar_intrebari = int(f.readline().strip()) intrebari = [list(map(int, f.readline().strip().split())) for _ in range(numar_intrebari)]
rezultate = rezolva_problema(numar_intrebari, intrebari)
with open("2017out.txt", "w") as f:
for rezultat in rezultate: f.write(str(rezultat) + "\n")
</syntaxhighlight>