2350 - grup

De la Universitas MediaWiki

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

Scrieţi un program care, pentru un şir dat de n numere naturale, rezolvă următoarele cerințe:

  1. 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ă.
  2. determină numărul de elemente ale celui mai numeros grup care se formează conform Criteriului 2.

Date de intrare

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

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

  • 0 < n ≤ 10000
  • Valorile din șirul de intrare sunt numere naturale cu maxim 9 cifre.

Exemplul 1

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

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

input.txt:

999999999999999999 2

73532 344 739 34343 34 433 23757

Output:

Input-ul nu convine conditiilor

Rezolvare

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")