3385 - Lumini 1

From Bitnami MediaWiki

Enunt[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 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[edit | edit source]

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

Explicație[edit | edit source]

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[edit | edit source]

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

Explicație[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> 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()

</syntaxhighlight>