2017 - P2017

From Bitnami MediaWiki

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>