2350 - grup
Ionel este pasionat de problemele cu șiruri de numere naturale. Pornind de la un șir dat, el numește grup un subșir de numere care se formează după criterii precizate. De aceasta dată, el alege două criterii:
Criteriul 1: grupează numerele după prima lor cifră. De exemplu, numerele 231
și 2745
aparțin aceluiași grup deoarece ambele încep cu aceeași cifră (2
).
Criteriul 2: pune în același grup toate numerele care au în componența lor aceleași cifre, indiferent de numărul de apariții a fiecărei cifre. De exemplu, numerele 234372
și 3224727
vor fi plasate în același grup deoarece în componența ambelor intră cifrele 2
, 3
, 4
si 7
, și numai acestea.
Cerința[edit | edit source]
Scrieţi un program care, pentru un şir dat de n numere naturale, rezolvă următoarele cerințe:
- determină numărul minim dintre numerele aparținând celui mai numeros grup care se formează conform Criteriului 1. Dacă sunt mai multe grupuri cu număr maxim de elemente, se va determina numărul minim din grupul pentru care prima cifra este cea mai mică.
- determină numărul de elemente ale celui mai numeros grup care se formează conform Criteriului 2.
Date de intrare[edit | edit source]
Fișierul de intrare input.txt
conţine pe prima linie două numere naturale n
și c
, separate printr-un spațiu. Valoarea lui c
este 1
sau 2
, în funcție de cerința problemei. Pe a doua linie se găsesc n
numere naturale, separate prin câte un spațiu.
Date de ieșire[edit | edit source]
Fișierul de ieșire output.txt
va conţine pe prima linie rezultatul cerut în funcție de cerința indicată în fișierul de intrare.
Restricții și precizări[edit | edit source]
0 < n ≤ 10000
- Valorile din șirul de intrare sunt numere naturale cu maxim
9
cifre.
Exemplul 1[edit | edit source]
input.txt:
7 1
73532 344 739 34343 34 735 23757
output.txt:
34
Explicație:
c = 1
; Se formează următoarele grupuri:
G1: 73532
, 739
, 735
(încep cu cifra 7
)
G2: 344
, 34343
, 34
(încep cu cifra 3
)
G3: 23753
(începe cu cifra 2
)
G1 si G2 au număr maxim de elemente (3
) dar se va afișa minimul din grupul G2 (34
).
Exemplul 2[edit | edit source]
input.txt:
7 2
73532 344 739 34343 34 433 23757
output.txt:
4
Explicație:
c = 2
; Se formează următoarele grupuri:
G1: 73532
, 23757
(cifrele 2
, 3
, 7
, 5
)
G2: 739
(cifrele 3
, 7
, 9
)
G3: 344
, 34343
, 34
, 433
(cifrele 3
, 4
)
G3 are numărul maxim de elemente (4
)
Exemplul 3[edit | edit source]
input.txt:
999999999999999999 2
73532 344 739 34343 34 433 23757
Output:
Input-ul nu convine conditiilor
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def verificare(n):
if not(1<=n<=10000): print("Input-ul nu convine conditiilor") exit()
def prima_cifra(n):
while n > 9: n //= 10 return n
with open("input.txt", "r") as fin, open("output.txt", "w") as fout:
n, optiune = map(int, fin.readline().split()) verificare(n) NR = [0] * 11 M = [1000000000] * 11 a = [0] * 1025
l=list(map(int, fin.readline().split()))
if optiune == 1: for i in range(1, n + 1): x = l[i-1] c = prima_cifra(x) NR[c] += 1 M[c] = min(M[c], x)
x = NR[0] c = M[0] for i in range(1, 10): if NR[i] > x: x = NR[i] c = M[i] elif x == NR[i]: c = min(c, M[i])
fout.write(str(c) + "\n") else: for i in range(1, n + 1): x = l[i-1] c = 0 if x == 0: c = 1 else: while x > 0: c |= 1 << (x % 10) x //= 10 a[c] += 1
x = a[0] for i in range(1, 1025): x = max(x, a[i])
fout.write(str(x) + "\n")
</syntaxhighlight>