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