3385 - Lumini 1
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>