3385 - Lumini 1

De la Universitas MediaWiki

Enunt

Nicoleta, o fată curioasă, dorește să afle cine dintre colegii de clasă are bradul cu cele mai multe luminițe, cât și numărul de luminițe din acest brad. Fiind olimpică la informatică și iubind provocările, colegii i-au comunicat prin SMS doar numărul de divizori corespunzător numărului de luminițe din brad, acesta fiind și cel mai mic număr cu această proprietate. De exemplu, George, colegul de bancă, i-a dat numărul 5, corespunzător unui număr de 16 luminițe, mai exact D16 = {1, 2, 4, 8, 16}, iar 16 este numărul cel mai mic cu exact 5 divizori. Mesajele colegilor vor fi de forma: NrDiv Nume, unde NrDiv reprezintă numărul de divizori, iar Nume reprezintă numele colegului care a trimis mesajul.

Cerinţa

Scrieţi un program care să determine: 1) Numărul de luminițe din bradul cu cele mai multe luminițe. 2) Numele colegului care are bradul cu cele mai multe luminițe.

Date de intrare

Fișierul de intrare lumini.in conţine pe prima linie cerința 1 sau 2. Pe a doua linie numărul n, reprezentând numărul colegilor Nicoletei, iar pe următoarele n linii vor fi mesajele colegilor, sub forma descrisă în enunţ, câte un mesaj pe o linie.

Date de ieșire

Date de ieșire

Fișierul de ieșire lumini.out va conţine o singură linie pe care va fi scris numărul de luminițe al bradului cu cele mai multe luminițe (cerința 1) sau numele primului coleg din lista primită care are bradul cu cele mai multe luminițe (cerința 2).

Restricţii şi precizări

  • 1 ≤ n ≤ 5000, n număr natural;
  • 1 < NrDiv ≤ 120, NrDiv este număr natural;
  • numele oricărui coleg are maximum 23 de caractere alfabetice;
  • numărul maxim de luminițe din instalația de brad va fi 65536 (216).

Exemplul 1

lumini.in
 1
 3
 12 Tryp
 13 Mike
 14 Gymi
lumini.out
 4096

Explicație

Tryp are o instalație cu 60 de luminițe. Mike are o instalație cu 4096 de luminițe. Gymi are o instalație cu 192 de luminițe.

Exemplul 2

lumini.in
 2
 6
 22 Andreea
 26 Iustina
 40 Iuliana
 26 Andreia
 27 Corina
 30 Raluca
lumini.out
 Iustina

Explicație

Iustina și Andreia, au fiecare câte o instalație cu 12288 de luminițe. Iustina apare prima în listă.

Rezolvare

def calculate_lights(N, messages):
    max_divisors = 0
    max_lights = 0
    owner = ""

    for message in messages:
        divisors, name = message.split()
        divisors = int(divisors)
        lights = divisors * (divisors + 1) // 2
        if divisors > max_divisors or (divisors == max_divisors and lights > max_lights):
            max_divisors = divisors
            max_lights = lights
            owner = name

    return max_lights if N == 1 else owner

def main():
    with open("lumini.in", "r") as fin:
        choice = int(fin.readline().strip())
        N = int(fin.readline().strip())
        messages = [fin.readline().strip() for _ in range(N)]

    result = calculate_lights(N, messages)

    with open("lumini.out", "w") as fout:
        fout.write(str(result))

if __name__ == "__main__":
    main()