Wall (Muro) - International Olympiad in Informatics

Anuncio
InternationalOlympiadinInformatics2014
13-20thJuly2014
Taipei,Taiwan
wall
Day-1tasks
Language:es-MX
Wall(Muro)
Jian-Jiaestáconstruyendounmuroconladrillostodosdelmismotamaño.Elmurotiene columnasde
ladrillosnumeradasde a
deizquierdaaderecha.Lascolumnaspuedentenerdistintasalturas
dependiendodelnúmerodeladrillosenellas.
Jian-Jiaconstruyeelmurodelasiguienteforma.Inicialmentenohayladrillosenningunacolumna.
Después,Jian-Jiarealiza fasesdeagregaroquitarladrillos.Elprocesodeconstruccióntermina
cuandolas faseshansidocompletadas.EncadafaseJian-Jiarecibeunrangodecolumnas
contiguasyunaaltura conlosquerealizaelsiguienteprocedimiento:
Enlasfasesdeagregar,Jian-Jiaagregaladrillosaaquellascolumnasdelrangoquetienen
menosde ladrillosdemodoquequedenconexactamente ladrillos.Élnoagreganingún
ladrilloalascolumnasquetienen omásladrillos.
Enlasfasesdequitar,Jian-Jiaquitaladrillosdeaquellascolumnasdelrangoquetienenmásde
ladrillosdemodoquequedenconexactamente ladrillos.Élnoquitaningúnladrillodelas
columnasquetienen omenosladrillos.
Tutareaesdeterminarlaformafinaldelmuro.
Ejemplo
Supónquehay10columnasdeladrillosy6fasesdeconstrucción.Todoslosrangosdelasiguiente
tablasonintervaloscerrados.Losdiagramasdecadafasesemuestrandebajo.
fase
0
1
2
3
4
5
tipo
agregar
quitar
quitar
agregar
agregar
quitar
rango
columnas1a8
columnas4a9
columnas3a6
columnas0a5
columna2
columnas6a7
altura
4
1
5
3
5
0
Aliniciotodaslascolumnasestánvacías,despuésdelafase0cadaunadelascolumnasdela1ala8
tiene4ladrillos,lascolumnas0y9permanecenvacías.Enlafase1,sequitanladrillosdelascolumnas
4ala8hastaquecadaunadeellastenga1ladrillo,lacolumna9permanecevacíaylascolumnasde
la0ala3quedansincambios.Lafase2nocambiaelmurodadoquelascolumnasdela3ala6no
tienenmásde5ladrillos.Despuésdelafase3elnúmerodeladrillosenlascolumnas0,4y5se
incrementaa3.Alfinalizarlafase4hay5ladrillosenlacolumna2.Lafase5quitatodoslosladrillos
delascolumnas6y7.
1/3
Problema
Escribeunprogramaquedadaladescripcióndelas fases,calculeelnúmerodeladrillosencada
columnaalfinalizartodaslasfases.NecesitarásimplementarlafunciónbuildWall.
buildWall(n,k,op,left,right,height,finalHeight)
n:elnúmerodecolumnasenelmuro.
k:elnúmerodefases.
op:unarreglodelongitud dondeop[i]eseltipodelafase :1paraunafasede
agregary2paraunafasedequitar,para
.
leftyright:arreglosdelongitud representandoqueelrangodecolumnasenlafase
iniciaenlacolumnaleft[i]yterminaenlacolumnaright[i](incluyendolos
extremosleft[i]yright[i]),para
.Siempresecumpleleft[i]
right[i].
height:unarreglodelongitud dondeheight[i]eslaalturaparalafase ,para
.
finalHeight:unarreglodelongitud ;deberásrepresentartusresultadoscolocandoel
númerofinaldeladrillosdelacolumna finalHeight[i],para
.
2/3
Subproblemas
Paratodoslossubproblemaslasalturasdelasfasesseránenterosnonegativosmenoresoigualesa
.
subproblema puntos
1
nota
8
sinlímitesadicionales
2
24
3
29
todaslasfasesdeagregar
seencuentranantesdelas
fasesdequitar
Sinlímitesadicionales
4
39
sinlímitesadicionales
Detallesdeimplementación
Debesenviarsólounarchivo,llamadowall.c,wall.cppowall.pas.Estearchivodebe
implementarlafuncióndescritaarribausandoelsiguienteprototipo.Ademásnecesitarásincluirel
archivowall.hparaelcasodeprogramasenC/C++.
ProgramaenC/C++
voidbuildWall(intn,intk,intop[],intleft[],intright[],
intheight[],intfinalHeight[]);
ProgramaenPascal
procedurebuildWall(n,k:longint;op,left,right,height:
arrayoflongint;varfinalHeight:arrayoflongint);
Evaluadordeprueba
Elevaluadordepruebaleelaentradaenelsiguienteformato:
línea1:n,k.
línea
(
):op[i],left[i],right[i],height[i].
3/3
Descargar