<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2458_-_Hobby</id>
	<title>2458 - Hobby - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2458_-_Hobby"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2458_-_Hobby&amp;action=history"/>
	<updated>2026-05-01T04:39:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2458_-_Hobby&amp;diff=10017&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Enunt == În școala lui Gigel copiii se pregătesc pentru vacanță. Ei vor să-și petreacă timpul liber în mod diferit în funcție de hobby-urile pe care le au. În concluzie, urmează să formeze grupuri, pe baza preferințelor. Totuși, a apărut o problemă. Unii sunt dispuși să renunțe la propriul hobby și preferă să facă parte dintr-un grup din care face parte și un anumit prieten al lor. În școala lui Gigel sunt n copii, numerotați de la 1 la n. == C...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2458_-_Hobby&amp;diff=10017&amp;oldid=prev"/>
		<updated>2024-06-03T16:55:45Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == În școala lui Gigel copiii se pregătesc pentru vacanță. Ei vor să-și petreacă timpul liber în mod diferit în funcție de hobby-urile pe care le au. În concluzie, urmează să formeze grupuri, pe baza preferințelor. Totuși, a apărut o problemă. Unii sunt dispuși să renunțe la propriul hobby și preferă să facă parte dintr-un grup din care face parte și un anumit prieten al lor. În școala lui Gigel sunt n copii, numerotați de la 1 la n. == C...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
În școala lui Gigel copiii se pregătesc pentru vacanță. Ei vor să-și petreacă timpul liber în mod diferit în funcție de hobby-urile pe care le au. În concluzie, urmează să formeze grupuri, pe baza preferințelor. Totuși, a apărut o problemă. Unii sunt dispuși să renunțe la propriul hobby și preferă să facă parte dintr-un grup din care face parte și un anumit prieten al lor. În școala lui Gigel sunt n copii, numerotați de la 1 la n.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Cunoscând prietenul preferat și hobby-ul fiecărui copil, scrieți un program care determină numărul grupurilor care se vor forma și numărul grupurilor formate din copii care au hobby-uri identice; doi copii vor face parte din același grup, dacă cel puțin unul din cei doi l-a numit pe celălalt ca prieten.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului de intrare hobby1.in se află un număr natural n, reprezentând numărul copiilor. Pe fiecare din următoarele n linii se află câte o pereche de numere naturale, unde primul număr reprezintă numărul de ordine al copilului având ca prieten preferat copilul identificat cu cel de al doilea număr. Pe următoarele n linii se află, pe fiecare, câte un șir de caractere format din litere mici ale alfabetului englez, reprezentând hobby-urile copiilor în ordinea în care sunt numerotați copiii.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Pe prima linie a fișierului de ieșire hobby1.out veți scrie numărul gr al grupurilor de copii. Pe următoarea linie veți afișa numărul grupurilor în care toți copiii au același hobby.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 700.&lt;br /&gt;
* 1 ≤ lungime_denumire_hobby ≤ 10.&lt;br /&gt;
* 1 ≤ gr ≤ 400.&lt;br /&gt;
* numărul de ordine al fiecărui copil apare o singură dată pe prima poziție a unei perechi.&lt;br /&gt;
* un copil poate fi prietenul mai multor copii.&lt;br /&gt;
* numărul maxim al hobby-urilor: 20.&lt;br /&gt;
* La concurs s-au dat 10 puncte din oficiu, aici sunt date pe exemplu.&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; hobby.in&lt;br /&gt;
 8&lt;br /&gt;
 1 2&lt;br /&gt;
 3 4&lt;br /&gt;
 5 6&lt;br /&gt;
 7 7&lt;br /&gt;
 8 3&lt;br /&gt;
 2 1&lt;br /&gt;
 4 3&lt;br /&gt;
 6 2&lt;br /&gt;
 baschet&lt;br /&gt;
 baschet&lt;br /&gt;
 tenis&lt;br /&gt;
 fotbal&lt;br /&gt;
 baschet&lt;br /&gt;
 baschet&lt;br /&gt;
 muzica&lt;br /&gt;
 tenis&lt;br /&gt;
; hobby.out&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Avem 3 grupuri:&lt;br /&gt;
1: 1 2 5 6&lt;br /&gt;
2: 7&lt;br /&gt;
3: 3 4 8&lt;br /&gt;
Toți copiii din primul grup (cu numerele de ordine 1 2 5 6) au ca hobby baschetul, copilul 7 este singur, iar în al treilea grup hobby-urile diferă. Deci avem 2 grupuri în care copiii au același hobby.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def form_groups(n, preferences, hobbies):&lt;br /&gt;
    groups = {}  # Dicționar pentru a înregistra grupurile&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        friend = preferences[i]&lt;br /&gt;
        hobby = hobbies[i]&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă prietenul preferat este deja într-un grup&lt;br /&gt;
        if friend in groups:&lt;br /&gt;
            # Adăugăm copilul curent în grupul prietenului său&lt;br /&gt;
            groups[friend].append(i)&lt;br /&gt;
            groups[i] = groups[friend]  # Actualizăm grupul pentru copilul curent&lt;br /&gt;
        else:&lt;br /&gt;
            # Creăm un nou grup pentru ei&lt;br /&gt;
            groups[i] = [i]&lt;br /&gt;
&lt;br /&gt;
    return groups&lt;br /&gt;
&lt;br /&gt;
def count_same_hobbies(groups, hobbies):&lt;br /&gt;
    same_hobby_groups = 0&lt;br /&gt;
&lt;br /&gt;
    for group in groups.values():&lt;br /&gt;
        # Verificăm dacă toți copiii din grup au același hobby&lt;br /&gt;
        same_hobby = all(hobbies[child] == hobbies[group[0]] for child in group)&lt;br /&gt;
        if same_hobby:&lt;br /&gt;
            same_hobby_groups += 1&lt;br /&gt;
&lt;br /&gt;
    return same_hobby_groups&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;hobby.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        preferences = {}&lt;br /&gt;
        hobbies = {}&lt;br /&gt;
&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            child, friend = map(int, fin.readline().split())&lt;br /&gt;
            preferences[child] = friend&lt;br /&gt;
&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            hobbies[i] = fin.readline().strip()&lt;br /&gt;
&lt;br /&gt;
    # Formăm grupurile&lt;br /&gt;
    groups = form_groups(n, preferences, hobbies)&lt;br /&gt;
&lt;br /&gt;
    # Numărăm grupurile cu aceleași hobby-uri&lt;br /&gt;
    same_hobby_groups = count_same_hobbies(groups, hobbies)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;hobby.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(len(groups)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        fout.write(str(same_hobby_groups) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AjM</name></author>
	</entry>
</feed>