2017 - P2017: Difference between revisions

From Bitnami MediaWiki
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 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.
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 2017.out va conține Q linii, pe linia i aflându-se răspunsul la întrebarea i.
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
; 2017.in
; 2017in.txt
: 5
: 5
: 1 7
: 1 7
Line 23: Line 23:
: 6 13
: 6 13
; Ieșire
; Ieșire
; 2017.out
; 2017out.txt
: 14
: 14
: 45
: 45
Line 32: Line 32:
== Exemplu 2 ==
== Exemplu 2 ==
; Intrare
; Intrare
; 2017.in
; 2017in.txt
: 5
: 5
: 10 7
: 10 7
Line 40: Line 40:
: 6 13
: 6 13
; Ieșire
; Ieșire
; 2017.out
; 2017out.txt
: Date invalide
: Date invalide
: 45
: 45
Line 82: Line 82:




with open("2017.in", "r") as f:
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("2017.out", "w") as f:
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>

  1. 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>