Przyjaciel (Friend) - International Olympiad in Informatics

Transkrypt

Przyjaciel (Friend) - International Olympiad in Informatics
InternationalOlympiadinInformatics2014
13-20thJuly2014
Taipei,Taiwan
friend
Day-2tasks
Language:pl-PL
Przyjaciel(Friend)
Budujemysiećspołecznościowązłożonąz osóbponumerowanych0,…,
.Pewneparyosóbw
siecistająsięprzyjaciółmi.Jeśliosoba stajesięprzejacielemosoby ,toosoba równieżstajesię
przyjacielemosoby .
Osobysądodawanedosieciw fazach,ponumerowanychod0do
.Osoba jestdodawanado
sieciwfazie .Wfazie0wsiecijestumieszczanatylkoosoba0.Wkażdejznastępnych
faz
nowaosobajestzapraszanadosieciprzezgospodarza,którymmożebyćdowolnaosobaznajdująca
sięjużwsieci.Osobabędącagospodarzemwfazie możedodaćdosieciosobę
zgodniezjednymztrzechnastępującychprotokołów:
IAmYourFriendczyniosobę przyjacielemgospodarza(inikogowięcej).
MyFriendsAreYourFriendsczyniosobę przyjacielemkażdejosobybędącejprzyjacielem
aktualnegogospodarza.Zwróćuwagę,żewtymprotokoleosoba niezostajeprzyjacielem
gospodarza.
WeAreYourFriendsczyniosobę przyjacielemaktualnegogospodarzaorazwszystkichosób
będącychjegoaktualnymiprzyjaciółmi.
Pozbudowaniusiecichcielibyśmywybraćpróbkęosóbzsiecidobadaniajejwłasności.Ponieważ
przyjacielemajązazwyczajpodobnezainteresowania,wpróbceniemożeznaleźćsiężadnapara
przyjaciół.Zkażdąosobązwiązanajestjejadekwatnośćdlabadań,wyrażonadodatniąliczbą
całkowitą.Naszymcelemjestznalezieniepróbkionajwiększejsumarycznejadekwatności.
Przykład
faza
1
2
3
4
5
gospodarz
0
0
1
2
0
protokół
IAmYourFriend
MyFriendsAreYourFriends
WeAreYourFriends
MyFriendsAreYourFriends
IAmYourFriend
dodaneparyprzyjaciół
(1,0)
(2,1)
(3,1),(3,0),(3,2)
(4,1),(4,3)
(5,0)
Początkowowsiecijesttylkoosoba0.Gospodarzfazy1(osoba0)zapraszanowąosobę1przyużyciu
protokołuIAmYourFriend,cooznacza,żeosoby0i1stająsięprzyjaciółmi.Gospodarzfazy2
(ponownieosoba0)zapraszaosobę2zapomocąMyFriendsAreYourFriends,wwynikuczegoosoba1
(jedynyprzyjacielgospodarza)stajesięjedynymprzyjacielemosoby2.Gospodarzfazy3(osoba1)
dodajedosieciosobę3,wykonującWeAreYourFriends,czyczyniosobę3przyjacielemosoby1
(gospodarza)orazosób0i2(przyjaciółgospodarza).Wtabelipowyżejzaprezentowanoteżfazy4i5.
Końcowasiećjestprzedstawionanarysunku,naktórymliczbywkółkachtoetykietyosób,natomiast
liczbyobokkółektoichadekwatności.Próbkaskładającasięzosób3i5masumaryczną
1/3
adekwatnośćrówną20+15=35,którajestnajwiększąmożliwąsumarycznąadekwatnościąpróbki.
Zadanie
Mającdaneopisyfazorazadekwatnościposzczególnychosób,znajdźpróbkęonajwiększej
sumarycznejadekwatności.TwojezadaniepolegatylkonanapisaniufunkcjifindSample.
findSample(n,confidence,host,protocol)
n:liczbaosób.
confidence:tablicarozmiaru ;confidence[i]podajeadekwatnośćosoby .
host:tablicarozmiaru ;host[i]podajegospodarzawfazie .
protocol:tablicarozmiaru ;protocol[i]podajekodprotokołuużywanegowfazie
(
):0oznaczaIAmYourFriend,1oznaczaMyFriendsAreYourFriends,
natomiast2oznaczaWeAreYourFriends.
Ponieważfaza0niemagospodarza,host[0]orazprotocol[0]niesąokreśloneinie
powinnybyćwykorzystywanewTwoimprogramie.
Wynikiemfunkcjipowinnabyćnajwiększamożliwasumarycznaadekwatnośćpróbki.
Podzadania
Wniektórychpodzadaniachwykorzystujesiętylkoczęśćzprotokołów,zgodnieztabeląponiżej.
1
liczba
pkt
11
2
8
ść
3
8
ść
Tylko
MyFriendsAreYourFriends
TylkoWeAreYourFriends
4
19
ść
TylkoIAmYourFriend
podzad.
5
23
6
31
adekwatość
ść
Wszystkieadekwatnościsą
równe1
ść
używaneprotokoły
Wszystkietrzyprotokoły
Protokoły
MyFriendsAreYourFriendsi
IAmYourFriend
Wszystkietrzyprotokoły
2/3
Implementacja
Powinieneśzgłosićdokładniejedenplikonazwiefriend.c,friend.cpplubfriend.pas.Wpliku
powinnaznaleźćsięimplementacjafunkcjiopisanejpowyżej,onastępującejsygnaturze.Wprzypadku
programuwC/C++powinieneśtakżezałączyć(include)pliknagłówkowyfriend.h.
ProgramywC/C++
intfindSample(intn,intconfidence[],inthost[],intprotocol[]);
ProgramywPascalu
functionfindSample(n:longint,confidence:arrayoflongint,host:array
oflongint;protocol:arrayoflongint):longint;
Przykładowyprogramsprawdzający
Przykładowyprogramsprawdzającywczytujedanewnastępującymformacie:
wiersz1:n
wiersz2:confidence[0],...,confidence[n-1]
wiersz3:host[1],protocol[1],host[2],protocol[2],...,host[n-1],protocol[n1]
PrzykładowyprogramsprawdzającywypiszenawyjściewynikfunkcjifindSample.
3/3

Podobne dokumenty