Friend (amigo) - International Olympiad in Informatics

Anuncio
InternationalOlympiadinInformatics2014
13-20thJuly2014
Taipei,Taiwan
friend
Day-2tasks
Language:es-AR
Friend(amigo)
Seconstruyeunaredsocialapartirde personasnumeradas0,...,
.Algunosparesde
personasenlaredseránamigos.Silapersona sehaceamigodelapersona ,entonceslapersona
tambiénsehaceamigodelapersona .
Laspersonassonañadidasalareden etapas,lascualestambiénsonnumeradasde a
.La
persona esañadidaenlaetapa .Enlaetapa0,lapersona0esañadidacomolaúnicapersonadela
red.Encadaunadelassiguientes
etapas,lapersonaesañadidaalaredporunservidor,que
puedesercualquierpersonayaingresadaalared.Durantelaetapa (
),elservidorpara
esaetapapuedeañadirlaingresantepersona enlaredporunodelossiguientestresprotocolos:
IAmYourFriendhacealapersona amigodelservidorsolamente.
MyFriendsAreYourFriendshaceapersona amigodecadaamigodelservidor.Observeque
esteprotocolonohacealapersona amigodelservidor.
WeAreYourFriendshacealapersona amigodelservidor,ytambiénamigodecadaamigodel
servidor.
Despuésdeconstruirlaredsedeseaextraerunamuestraparaunaencuesta,esoes,elegirungrupo
depersonasdelared.Yaqueamigosusualmentetieneninteresessimilares,lamuestranodebiera
incluirningúnpardepersonasqueseanamigosentresí.Cadapersonatieneuníndicedeconfianza,
expresadoporunenteropositivo,ysequiereencontrarunamuestraconlamáximaconfianzatotal.
Ejemplo
etapa
1
2
3
4
5
servidor
0
0
1
2
0
protocolo
IAmYourFriend
MyFriendsAreYourFriends
WeAreYourFriends
MyFriendsAreYourFriends
IAmYourFriend
relacionesamigoañadidas
(1,0)
(2,1)
(3,1),(3,0),(3,2)
(4,1),(4,3)
(5,0)
Inicialmentelaredcontienesólolapersona0.Elservidordeetapa1(persona0)invitaalanueva
persona1atravésdelprotocoloIAmYourFriend,porloquesehacenamigos.Elservidordelaetapa2
(persona0nuevamente)invitalapersona2conMyFriendsAreYourFriends,quehacealapersona1
(elúnicoamigodelservidor)el[únicoamigodelapersona2.Elservidordelaetapa3(persona1)
añadelapersona3medianteWeAreYourFriends,quehacealapersona3amigodelapersona1(el
servidor)ypersonas0y2(losamigosdelservidor).Lasetapas4y5sonmostradastambiénenla
tablaarriba.Laredfinalesmostradaenlasiguientefigura,enlacuallosnúmerosdentrodelos
círculosmuestranlosrótulosdelaspersonas,ylosnúmerospróximosaloscírculosmuestranelíndice
deconfianza.Lamuestraconsistiendodelaspersonas3y5tieneíndicedeconfianzatotaliguala20+
1/3
15=35,elcualeselmáximoíndicetotaldeconfianzaposible.
Tarea
Dadaladescripcióndecadaetapayelvalordeconfianzadecadapersona,encuentreunamuestra
conlamáximaconfianza.SolodebesimplantarlafunciónfindMuestra.
findMuestra(n,confidence,host,protocol)
n:elnúmerodepersonas.
confidence:arraydelargo ;confidence[i]daelvalorconfianzadelapersona .
host:arraydelargo ;host[i]daelservidordeetapa .
protocol:arraydelargo ;protocol[i]daelcodigodeprotocolousadoenlaetapa
(
):0paraIAmYourFriend,1paraMyFriendsAreYourFriends,y2para
WeAreYourFriends.
Puestoquenohayservidorenetapa0,host[0]yprotocol[0]estánindefinidosyno
debieranseraccedidosportuprogram.
lafuncióndebedevolverelmáximoaposiblevalortotaldeconfianzadelamuestra.
Subtareas
Algunassubtareasusansólounsubconjuntodeprotocolos,talcomosecompruebaenlasiguiente
tabla.
subtarea puntos
1
11
2
8
3
4
8
19
5
23
6
31
confianza
Todoslosvaloresde
confianzason1
protocolosusados
Todoslostresprotocolos
Solamente
MyFriendsAreYourFriends
SolamenteWeAreYourFriends
SolamenteIAmYourFriend
Tanto
MyFriendsAreYourFriendsy
IAmYourFriend
Lostresprotocolos
2/3
Detallesdeimplantación
Debesenviarexactamenteunarchive,llamadofriend.c,friend.cppofriend.pas.Este
archivodeberáimplantarelsubprogramadescriptomásarriba,utilizandolossiguientes
encabezamientos.Necessitasincluirtambiénunarchivocabezafriend.hparalaimplantaciónen
C/C++.
ProgramaciónenC/C++
intfindSample(intn,intconfidence[],inthost[],intprotocol[]);
ProgramaciónenPascal
functionfindSample(n:longint,confidence:arrauienteyoflongint,host:array
oflongint;protocol:arrayoflongint):longint;
Samplegrader
Elsamplegrader(programaevaluadorparapruebalocal)leesuentradaconelformatosiguiente:
linea1:n
linea2:confidence[0],...,confidence[n-1]
linea3:host[1],protocol[1],host[2],protocol[2],...,host[n-1],protocol[n-1]
ElsamplegraderimprimiráelvalorderetornodefindSample.
3/3
Descargar