parositas_moho.py
1    # Nemes Tihamér OITV 2014
2    # Harmadik forduló II. korcsoport
3    # 2. feladat: Párosítás (22 pont)
4    # Két azonos létszámú csapat egyéni küzdelmet vív egymással, a te csapatod minden tagja az
5    # ellenfél egy másik tagjával mérkőzik párosításban. Két játékos közül mindig a nagyobb tudású
6    # győz. Ismerjük mindkét csapat tagjainak tudását.
7    # Készíts programot, amely megad egy olyan párosítást, amely esetén a csapatod a lehető
8    # legtöbbször győz!
9    # A standard bemenet első sora a csapattagok N számát (1≤N≤10000) tartalmazza. Mindkét csapat
10   # tagjait az 1,…,N számokkal azonosítjuk. A második sor pontosan N egész számot tartalmaz
11   # egy-egy szóközzel elválasztva, az i-edik szám a csapatod # i-edik tagjának Ai erőssége
12   # (1≤Ai≤100000). A harmadik sor is pontosan N egész számot tartalmaz egy-egy szóközzel
13   # elválasztva, az i-edik szám az ellenfél i-edik tagjának Bi erőssége (1≤Bi≤100000).
14   # A standard kimenet első sorába az elérhető győzelmek maximális számát kell írni! A második
15   # sor egy olyan párosítást adjon meg, amely maximális számú győzelmet eredményez csapatodnak!
16   # A sor pontosan N különböző egész számot tartalmazzon egy-egy szóközzel elválasztva, az i-edik
17   # szám az ellenfél csapatából annak a versenyzőnek a sorszáma legyen, aki a csapatod i-edik
18   # tagjával mérkőzik. Több megoldás esetén bármelyik megadható.
19   # Példa:
20   # bemenet                   kimenet
21   # 6             5
22   # 1 9 2 3 6 4           6 5 1 2 4 3
23   # 1 2 3 4 5 6
24   
25   
26   #MOHÓ STRATÉGIA
27   
28   #Párosítási feladat: Adott két csapat (saját és ellenfél) a csapattagok erősségével.
29   #Párosítsuk úgy a csapatunk tagjait az ellenféllel, hogy a lehető legtöbb győzelem jöjjön össze!
30   
31   #Adatbeolvasás a standard bemenetről...
32   tagszam=int(input('Csapattagok száma:'))
33   #Csapatnál és ellenfélnél is a sorszámot és az erősséget tároljuk együtt: (sorszám, erősség)
34   csapat=[(i,int(ero)) for i,ero in enumerate(input('Erősség:').strip().split(),1)]
35   ellenf=[(i,int(ero)) for i,ero in enumerate(input('Erősség:').strip().split(),1)]
36   
37   print('Rendezetlenül:\n',csapat,'\n',ellenf)
38   
39   #rendezés erősség szerint növekvő sorrendbe
40   csapat=sorted(csapat,key=lambda x:x[1])
41   ellenf=sorted(ellenf,key=lambda x:x[1])
42   
43   print('Erősség szerint rendezetten:\n',csapat,'\n',ellenf)
44   
45   parok=[0]*tagszam
46   db=0    #győzelmek száma     
47   
48   while len(csapat)>0:
49       if csapat[0][1]>ellenf[0][1]: 	#mohó választás
50           parok[csapat[0][0]-1]=ellenf[0][0]
51           ellenf.pop(0)
52           db+=1
53       else:
54           #nincs olyan ellenfél, akit le tudna győzni...
55           parok[csapat[0][0]-1]=ellenf[-1][0]
56           ellenf.pop(-1)
57   
58       csapat.pop(0)
59   
60   print('Maximális győzelmek száma: %d' %db)
61   print('Párosítás:\n',parok)
62   
63   
64