InternationalOlympiadinInformatics2015
26thJuly-2ndAugust2015
Almaty,Kazakhstan
Day1
scales
Language:pt-BR
Scales
Aminatemseismoedas,numeradasde a esabequeasmoedastêmtodaspesosdiferentes.Ela
gostariadeordená-lasdeacordocomosseuspesos.Paratanto,Aminadesenvolveuumnovotipode
balança.
Umabalançatradicionaltemdoispratos.Parausarumadessasbalanças,vocêcolocaumamoedaem
cadapratoedeterminaqualdasmoedaséamaispesada.
AnovabalançadaAminaémaiscomplexa.Temquatropratos,rotulados , , e .Abalança
temquatroconfiguraçõesdiferentes,cadaumadasquaisrespondeaumaperguntadiferenteem
relaçãoàsmoedas.Parausarabalança,énecessáriocolocarexatamenteumamoedaemcadaum
dospratos , e .Alémdisso,naquartaconfiguração,énecessáriotambémcolocarexatamente
umamoedanoprato .
Asquatroconfiguraçõesfazemabalançaresponderàsquatroperguntasabaixo:
1. Qualdasmoedasnospratos , e éamaispesada?
2. Qualdasmoedasnospratos , e éamaisleve?
3. Qualdasmoedasnospratos , e éamediana?(Estaéamoedaquenãoénemamais
pesadanemamaislevedastrês.)
4. Dasmoedasnospratos , e ,considereapenasasmoedasquesãomaispesadasdoquea
moedanoprato .Seexistemmoedasassim,qualéamaisleve?Poroutrolado,senão
existemmoedasassim,qualdasmoedasnospratos , e éamaisleve?
Tarefa
EscrevaumprogramaqueordenaasseismoedasdeAminadeacordocomoseupeso.Oprograma
podeconsultarabalançaparacompararospesosdasmoedas.Seuprogramareceberávárioscasos
detestepararesolver,cadaumcorrespondendoaumnovoconjuntodeseismoedas.
SeuprogramadeveimplementarasfunçõesiniteorderCoins.Acadaexecuçãodoseu
programa,oavaliadorchamaráinitprecisamenteumavez.Istoforneceráonúmerodecasosde
testeelhepermitiráinicializarquaisquervariáveis.OavaliadorentãochamaráorderCoins()uma
vezparacadacasodeteste.
init(T)
T:Onúmerodecasosdetestequeseuprogramateráqueresolvernestaexecução.Té
uminteironointervalo
.
Estafunçãonãoretornanenhumvalor.
orderCoins()
1/4
Estafunçãoéchamadaexatamenteumavezparacadacasodeteste.
AfunçãodevedeterminaraordemcorretadasmoedasdaAmina,chamandoasfunções
getHeaviest(),getLightest(),getMedian(),e/ougetNextLightest()do
avaliador.
Umavezqueafunçãodeterminaaordemcorreta,devereportá-la,chamandoafunção
answer()doavaliador.
Depoisdechamaranswer(),afunçãoorderCoins()deveretornar,semdevolver
nenhumvalor.
Noseuprograma,vocêpodeusarasseguintesfunçõesdoavaliador:
answer(W)—seuprogramadeveusarestafunçãoparaindicararespostaquedeterminou.
W:Umvetordecomprimento6quecontémaordemcorretadasmoedas.W[0]aW[5]
devemserosnúmerosdasmoedas(i.e.,númerosde a )naordem,damaisleveparaa
maispesada.
SeuprogramadevesomentechamarestafunçãoapartirdeorderCoins(),umavez
paracadacasodeteste.
Estafunçãonãoretornanenhumvalor.
getHeaviest(A,B,C),getLightest(A,B,C),getMedian(A,B,C) —estas
funçõescorrespondem,respectivamente,àsconfigurações1,2e3dabalançadaAmina.
A,B,C:Asmoedassãocolocadasnospratos , e ,respectivamente.A,BeCdevem
sertrêsinteirosdistintos,todosnointerrvaloentre e inclusive.
CadafunçãoretornaumdosnúmberosA,B,eC:onúmerodamoedaapropriada.Por
exemplo,getHeaviest(A,B,C)retornaonúmerodamoedamaispesadadastrês.
getNextLightest(A,B,C,D) —estacorrespondeàconfiguração4dabalançade
Amina.
A,B,C,D:Asmoedasquesãocolocadasnospratos , , e ,respectivamente.A,B,
CeDdevemserquatrointeirosdistintos,todosnointervalode a ,inclusive.
AfunçãoretornaumdosnúmerosA,BeC:onúmerodamoedaselecionadapelabalança,
comodescritoacima,naconfiguração4.Assim,amoedaretornadaéamaislevedentre
asmoedasnospratos , e quesãomaispesadasqueamoedanoprato ,ou,se
nenhumadelasformaispesadadoqueamoedanoprato ,amoedaretornadaé
simplesmenteamaislevedastrêsmoedasnospratos , e .
Pontuação
Nãohásubtarefasnesteproblema.Apontuaçãoserábaseadaemquantaspesagensoseuprograma
executa(númerototaldechamadasparaasfunçõesgetLightest(),getHeaviest(),
getMedian()e/ougetNextLightest()).
Seuprogramaseráexecutadováriasvezes,cadavezcommúltiploscasosdeteste.Seja onúmero
deexecuçõesdoseuprograma.Estenúmeroestáfixadopelosdadosdeteste.Seseuprogramanão
ordenarasmoedascorretamenteemqualquercasodetestedequalquerexecução,receberá0pontos.
2/4
Casocontrário,asexecuçõesserãopontuadosindividualmente,comosegueabaixo.
Seja omenornúmerodepesagensparaordenarqualquersequênciadeseismoedasusandoa
balançadeAmina.Paratornaratarefamaisdesafiadora,nãovamosrevelarovalorde agora.
Suponhaqueomaiornúmerodepesagensentretodososcasosdetestedetodasasexecuçõesseja
,paraalguminteiro .Então,considereumaexecuçãoemparticulardoseuprograma.Seja
omaiornúmerodepesagensdestaexecução,considerandotodosostestesdecaso,onde é
umnúmeronãonegativo.(Sevocêusarmenosdoque pesagensparatodososcasosdetestedesta
execução,então
.)Então,apontuaçãodestaexecuçãoserá
,arrendondadopara
baixocomprecisãodedoisalgarismosdepoisdavírgula.
Emparticular,seseuprogramafizernomáximo pesagensparacadacasotestedecadaexecução,
vocêreceberá100pontos.
Exemplo
Suponhaqueaordemdasmoedasseja
Funçãochamada
getMedian(4,5,6)
getHeaviest(3,1,
2)
getNextLightest(2,
3,4,5)
getNextLightest(1,
6,3,4)
getHeaviest(3,5,
6)
getMedian(1,5,6)
getMedian(2,4,6)
answer([3,4,6,2,
1,5])
,damaisleveparaamaispesada.
Retorna
Explicação
6
Amoeda éamedianaentreasmoedas , e .
1
3
6
Amoeda éamaispesadaentreasmoedas , e .
Asmoedas , e sãotodasmaislevesdoqueamoeda ,entãoa
maisleveentreelas( )éretornada.
Asmoedas e sãoambasmaispesadasdoqueamoeda .Entre
asmoedas e ,amoeda éamaisleve.
5
Amoeda éamaispesadaentreasmoedas , e .
1
6
Amoeda éamedianaentreasmoedas , e .
Amoeda éamedianaentreasmoedas , e .
Oprogramadeterminouarespostacorretaparaestecasodeteste.
Avaliadorexemplo
Oavaliadorexemplolêdadosnoseguinteformato:
linha : —-onúmerodecasosdeteste
cadaumadaslinhasde a
:umasequênciade númerosdistintosde a :aordemdas
moedas,damaisleveàmaispesada.
Porexemplo,setivermosdoiscasosdeteste,emqueasmoedassãoordenadasrespectivamente
e
,aentradaseráaseguinte:
2
123456
346215
3/4
Oavaliadorexemploimprimeovetorquefoipassadocomoparâmetroparaafunçãoanswer().
4/4
Download

Scales