You are on page 1of 16

ErroresComunesenlosConcursosOnlineyde tiemporeal

PorShahriarManzoor TraducidoporGermnRojoEguren

Introduccin
Cadaao,laAsociacinparalaMaquinariaComputacional(ACM),organizaunconcursode programacinanivelmundial.Esteconcursotienedosfases:losconcursosregionalesylaFinal Mundial.Esteconcursodeprogramacinsecelebraconunobjetivomuyclaro:sirvedeescaparatede losmejoresprogramadoresdelmundoparalosrepresentantesdegrandescompaasenbuscade talento.Cuandopractiquisparalascompeticionesdeprogramacin,recordadquetodosvuestros esfuerzosdeberanestarenfocadosenmejorartushabilidadesdeprogramacin.Noimportacualsea vuestraactuacinenlosconcursos,noosdecepcionis.Elxitoenlosconcursosdeprogramacin tambinseveafectadoporotrosfactores.Losmsimportantessonelfactoradrenalina,elfactorsuerte, yelconjuntodeproblemasdelconcurso.Unaformadeobtenerobservacionessobretusesfuerzoses participarenelConcurso/PrcticaOnlinedelaUniversidaddeValladolidoenelJuezVirtualdela UniversidadEstataldelosUrales.LaresolucinOnlinedeproblemasincrementatuposicinOnlineen lasrespectivascompeticiones. Esteartculoesparaprincipiantes.Tratardelosproblemascomunesalosquetodoelmundose enfrentadurantelosconcursosyenlaresolucindeproblemasenelJuezOnlinedelaUniversidadde Valladolid.(http://acm.uva.es/problemset)yenelJuezOnlinedelaUniversidadEstataldelosUrales (http://acm.timus.ru).Lassugerenciassedividenentrespartes:SugerenciasGenerales,Sugerenciasde ConcursosOnline,ySugerenciasEspecficasdeValladolid.Tambinhablarbrevementeacercadelos concursosdeprogramacin.Alolargodetodoeldocumento,sehadetenerencuentaqueenlos concursosrealeslosjuecessonhumanos,yenlosconcursosOnline,losjuecessonprogramasde ordenador,anoserqueseespecifiquedeotraforma.

LosdiferentestiposdeConcursosdeProgramacin
Muchosconcursosdeprogramacintienenlugardurantetodoelao,comolosConcursosRegionales deACM,IOI,CEOI,yelConcursoPOTM.Elconcursodeprogramacinenvivomsprestigiosoesel ACMICPC(ConcursodeProgramacindeColegiadosInternacionalesdelaAsociacindeMaquinaria Computacional),yelconcursoOnlinedeprogramacinmsprestigiosoeselIPSC(Concursode ResolucindeProblemasenInternet).Enestaseccin,tratardealgunosdeestosconcursos. ConcursodeProgramacindeColegiadosInternacionalesdelaAsociacindeMaquinaria Computacional(ICPCporsusinicialeseningls) Esteconcursosecelebraunavezalao.ElprimerICPCtuvolugaren1977[4].Elconcursoduracinco

horas.Generalmente,seplanteanochoproblemaseningls.Sinembargo,enlasFinalesMundialesdel 2001,sepresentaronnueveproblemasalosconcursantes.Losconcursosregionalesseorganizandeuna formasimilar.Cadaequipotienetrespersonas,perosedaunsoloordenadorporequipo.Losequipos entregansussolucionespormediodeunsoftwarejuezllamadoPC^2(PCalcuadrado)desarrolladoen laCSUS(UniversidaddeSacramentodelEstadodeCalifornia).Loslenguajesdeprogramacin permitidossonC/C++,PascalyJava. ConcursosOnline EsmuchomssencilloparticiparenlosconcursosOnlinequeenlosreales,puestoquenohayviajeso tensionesasociadasaello[1].LasreglasdeentregaparalosconcursosOnlinedeValladolidydelJuez OnlinedelUSUsonlasmismas.Losconcursantestienenqueenviarsussolucionesporcorreo electrnicoaunadeterminadadireccinemail.LasreglasdelIPSCsonbastantediferentes.El OrganizadordelConcursoIPSCproporcionaentradasparalosproblemas.Enlugardeenviarporcorreo electrnicosussoluciones,losconcursantestienenqueenviarlassalidas.Paraobtenerms informacin,visitalascorrespondientespginasweb. UnadiferenciamuyimportanteentrelosconcursosenvivoylosconcursosOnlineesqueenlos concursosenvivotienesquetrabajarenelmismomedio(sistemaoperativo,compiladores, configuracindelosordenadores)quelosjueces,peroestonotieneporqueserciertoenlosconcursos Online.

AlgunosconsejosparaConcursantes
Caractersticasdeunbuenequipodeprogramacin 1.Debetenerconocimientodelosalgoritmosestndarylahabilidaddeencontrarelalgoritmo apropiadoparacadaproblemadelconjunto. 2.Lahabilidadparaimplementarelalgoritmoenunprogramaquefuncione. 3.Estrategiadecooperacinentrelosmiembrosdelequipo. TiposFrecuentesdeProblemasenlosConjuntos ProblemasdeBsqueda ProblemasdeGrafos ProblemasdeGeometra Problemasdeprogramacindinmica ProblemasTriviales ProblemasNoEstndares Losproblemasdebsquedaincluyenproblemasrelacionadosconbsquedaprimeroenanchura,y primeroenprofundidad.Losproblemasdegrafosincluyenproblemasrelacionadosconteorade grafos,comoelcaminomscorto,nmeromximodenodos,rboldemnimorecorrido,etc...Los problemasdegeometraincluyenproblemasbasadosengeometrageneralygeometracomputacional. Laprogramacindinmicaincluyeproblemasquetienenqueserresueltosconmtodostabulares.Los problemastrivialesincluyenproblemassencillos,problemasquepuedenserresueltossinmucho conocimientodealgoritmos,comoproblemasrelacionadosconnmerosprimos.Losproblemasno estndaresincluyenaquellosquenocaenenningunadeestasclases,como{coccinsimulada},el problemadelasnreinas,oinclusoproblemasbasadosenescritosdeinvestigacin.Porfaltadeespacio, notratarestostiposdeproblemasendetalle.Paraaprendermsacercadecmoseeligenlos problemasparaunconcurso,puedesleerelescritodeTomVerhoeff[6].

Loquedeberaishacerparaconvertirosenunbuenequipo
Lossiguientespuntospuedenserdeayudaparaformarunbuenequipodeconcurso.Algunosdeestos puntosestntomadosde[3]. 1.Organizadtantosconcursosdeentrenamientotancercanosalosrealescomoseaposible. 2.Analizadprimeroelconjuntodeproblemas. 3.Intentadclasificarlosproblemasporgradosdedificultad:fcil,moderado,complicado,etc... 4.Intentadresolverprimerolosproblemasfciles 5.Procuradnoequivocarosalasignarunadificultadaunproblema. 6.Noesnecesarioquetodoslosmiembrosseanexpertosentodaslasreasdeprogramacin,sinoque todosdebensereficientesenlobsico,comoescrituradeprocedimientos,depuracinycompilacin. 7.Algunospuedenestarespecializadosenlosproblemasdebsquedaydegrafos,otrosen programacindinmica,yalmenosunotienequetenerunprofundoconocimientodematemticas. 8.Todoslosmiembrosdelequipodeberanconocerlospuntosdbilesylosfuertesdesuscompaeros deequipoparaquecuandoseleaunproblema,sesepaquemiembrodeberaresolverlo. 9.Nomalgastesdemasiadotiempoconunnicoproblema.Puedequetuscompaerosdeequipo encuentrenunasolucinadecuadamsrpidamente. 10.Intentadleertodoslosproblemas. 11.Losmiembrosdelequipodeberantenerbuenacomunicacinentreellosporquetendrnquedecidir quiendeberaabandonarelordenadorydejarqueotromiembrosesiente. 12.Pensadsiempreenelbiendelequipo.Elconcursonoeselmomentomsapropiadoparaser egosta.Nopienses"Oh!Heacabadomicuota"o"Tengoqueresolverunproblemacomoseaonome cogernlaprximavez". 13.Laformamseficientedeescribirunprogramaesescribirloensolitario,evitandolacomunicacin generalylaconfusingeneradapordistintosestilosdeprogramacin. 14.Laresolucindeproblemasenconjuntotambinpuedeserdeayuda.Estaestrategiafuncionabien cuandoelconjuntodeproblemasescomplicado.Tambinesbuenaparalosequiposcuyametaes resolvercomomuchounproblema. 15.Enunconcursodecincohoras,tenis15horasmanualesycincodeordenador.Portanto,lashoras deordenadorsonextremadamentevaliosas.Intentadnodejardesocupadoelpuestodelordenador. 16.Siveisrechazadoelproblemamssencillodelconcursoporerrorestontos,sueleserunabuenaidea hacerqueotromiembrodelequiporehagaelproblemadesdeelprincipio. 17.Intentadverlasclasificacionesactuales,yaveriguartambinqueproblemaeselquemsse soluciona.Sivuestroequipoannoharesueltoeseproblema,entoncesintentadresolverlo inmediatamente. 18.Usadlasilladelantedelordenadornicamenteparateclearynoparapensar.Escribidvuestro programaenunpapel,analizarlo,yusadentonceselordenador. 19.Cuandolosjuecesrechacenvuestrasolucin,intentadpensarenvuestroserroresmsquesentarse delantedelordenador.Ladepuracinentiemporealeselerrordefinitivo. 20.Elsistemadepuntuacindeunconcursoesdigital,asquenopodisconseguirpuntosporun problemaresueltoal99%.Nointentisatacardemasiadosproblemasalmismotiempo.Alfinaldel concurso,podisencontrarosconquehabisresueltotodoslosproblemasal90%yquevuestroequipo estenlacoladelaclasificacin.Recordadsiemprequelosconcursosdeprogramacinnosonnada ms{queproblemasKnapsack0/1,sloqueaqupuedescogerlotodo}.Asquetendrisqueresolverlo conunaaproximacinvorazresolvedlosproblemasmssencillosprimero.

LosDiferentesTiposdeRespuestasdelosJueces

Lassiguientessonlosdiferentestiposderespuestasqueospodisencontrarenunconcurso[2]: Correcto Vuestroprogramadebeleerlaentradadesdeunficheroodesdelaentradaestndardeacuerdoconla especificacindelplanteamientodelconcurso.Losjuecescomprobarnvuestroprogramaconsus entradassecretas.Silasalidadevuestroprogramacoincideconlasalidadelosjueces,seosdaresta respuesta. SalidaIncorrecta Silasalidadevuestroprogramanocoincideconloquevuestrosjuecesesperan,osdarnnotificacin desalidaincorrecta.Lascausasdesalidaincorrectason: 1.Habisentendidomalelproblema 2.Seoshapasadoporaltoalgndetalleenelplanteamiento.Losdetallessoninformacinque perderissinoleiselenunciadodelproblemacuidadosamente. 3.Nohabiscomprobadolascondicionesextremas. 4.Notenisexperienciasuficientepararesolverelproblema. SinSalida Vuestroprogramanoproducesalida.Algunascausasposiblesson: 1.Estismalinterpretandoelformatodeentrada. 2.Vuestraseleccindeltipodelasvariableseserrnea. 3.Vuestroprogramaleelaentradadesdeunarchivoerrono,porejemplo,eljuezestdandolaentrada desde"a.in"perovuestroprogramaloleedesde"b.in". 4.Haocurridounerrordeejecucin,peroeljueznohapodidodetectarlo. 5.Larutadeaccesoespecificadaenvuestroprogramaparaelarchivodeentradaesincorrecta.El archivodeentradaest,enlamayorpartedeloscasos,eneldirectorioactual. ErrordePresentacin Esteerrorocurrecuandovuestroprogramaproduceunasalidacorrectaparalainformacinsecretade losjueces,peronolaproduceenelformatocorrecto.Elerrordepresentacinsetratarmsadelante enesteinforme. ErrordeEjecucin Estoerrorindicaquevuestroprogramarealizaunaoperacinilegalcuandoseejecutaconlaentradadel juez.Algunasoperacionesilegalesson: 1.Referenciainvlidaamemoria.(Elaccesofueradeloslmitesdeunvector,unpunteroqueintenta accederaunaposicindememorianoasignada,oasignadaporotrosprogramas.) 2.Divisinporcero.(Eldenominadordecualquierexpresinescero.) 3.Desbordamiento.(Elvalordeuntipodedatosexcedesulmite.) 4.ErrordeDominio.(Eldominioesincorrecto,comollamaralafuncinrazcuadradadeunvalor negativo.) LmitedeTiempoExcedido Enunconcurso,eljueztieneespecificadountiempolmiteparacadaproblema.Cuandotuprograma noterminaeneltiempoespecificado,tedanesteerror.Algunasposiblescausasson: 1.Elusodeunalgoritmoineficiente(porejemplo,intentarencontrarelfactorialdeungrannmerode formarecursiva).

2.Bucleinfinito. 3.Laesperaporlaentradadesdeeldispositivodeentradaestndarcuandoeljuezesperaquelotomis desdeficheros. 4.Elasumirunformatoincorrectodelosdatosdeentrada,porejemplo,asumsquelaentrada terminarconelcarcter"#",cuandoenrealidadlaentradadeljuezterminaconunfinaldefichero.

SugerenciasGeneralesparalosConcursos
MemoriaMxima LamemoriamximapermitidaenlapginadeValladolidesde32MB.Estacantidadincluyela memoriaparalasvariablesglobales,elheap,ylapila.Inclusosipensisquehabisasignadomucho menosde64Kdememoria,osdariscuentadequeeljueznormalmenteosdemostrarquehasido asignadamsmemoria.Tambin,nodeberaisasignarmsde32MBdememoriaglobal,porque32 MBeselmximoparatodoslostiposdememoria.Lamemoriamximaparalosconcursosreales vara;paralasFinalesMundialesesmsde128MB. LosProblemasconloscompiladoresDOSylaasignacindememoria AmuchosdenosotrosnosgustausarcompiladoresDOScomoelTURBOC++3.0yelBORLANDC+ +enelconcurso,quenosoportanlaasignacindemsde64Kcadavez.{Deformaquesiemprees buenaideaasignarmemoriaconunaconstantedeformaquevuestrasejecucionesdepruebausen menosde64Kdememoria,yantesdeenviarlo,eltamaodelamemoriasepuedaincrementar cambiandosolamenteelvalordelaconstante.}Sinopracticisesto,esmuyprobablequeosencontris conproblemascomo"ErrordeEjecucin","LmitedeTiempoExcedido"y"RespuestaIncorrecta".Un ejemplo:
int const SIZE=100; int store[SIZE][SIZE]; void initialize(void) { int i,j; for(i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) store[i][j]=0; }

Elerror"LmitedeTiempoExcedido"nosiemprees"LmitedeTiempoExcedido" Cuandoentreguisunprogramaaljuez,eljuezosdaunarespuesta,peroestarespuestanosiemprees precisa.Porejemplo,siasignismenosmemoriadelaqueesrequerida,entoncespuedequeel programanotermine(puedequenisiquieraseabortelaejecucin),yeljuezosdir:"Lmitede TiempoExcedido".Unavezvistoestemensaje,sitratisdeoptimizarvuestroprogramaenlugarde corregirelproblemadeasignacindememoriavuestroprogramanuncaseraceptado.Elejemplo siguienteilustraesteproblema.Elesqueletodevuestroprogramaescomosigue:


#include <stdio.h> int const MAX=100; int array[MAX],I;

void main(void) {

for(i=0; i<=100;i++) { if(array[i]==100) { array[i]= -10000; - - - - - - - - - - - - - - - } }

Enesteejemplo,sehaasignadounamatrizde100elementos.Vuestroprogramaintentaraccederal elemento100delamatriz,queestfueradelalcance[0..99],acausadeunerrorenlasentenciadel buclefor;ensulugar,accederaladireccindelavariablecontadori.Debidoaqueelvalorde array[100]seponea10000,lavariablecontadorsepondra10000,deformaquelaejecucindel bucletomarmuchomstiempoyesposiblequenotermineenabsoluto.Deformaqueeljuezosdael mensaje"LmitedeTiempoExcedido",peroenrealidadesunerrordeasignacindememoria. Probadelprogramaconvariosconjuntosdedatos Siemprehayunaentradayunasalidadeejemploproporcionadaconcadacuestindelconcurso.Los concursantessinexperienciaqueseveanincapacesderesolverningnproblemaseilusionancuandola salidadeunodesusprogramascoincideconlasalidaejemploparalacorrespondienteentrada,y piensanquehanresueltoelproblema.Asque,sinmalgastarniunsegundo,entreganelproblemapara queseacorregidoyenmuchoscasosconsiguenunarespuestade"errneo".Unconjuntodedatosno compruebasilasvariablesdetuprogramasehaninicializadocorrectamente,porquepordefectotodas lasvariablesglobalestienenelvalorcero(enteros=0,caracteres="\x0",reales=0.0,ypunteros= NULL).Inclusosilosasignisalprincipiodelprograma.{Inclusosiusisvariosconjuntosdedatos,el errorpuedeseguirocultosilosconjuntosdedatossondelmismotamao,avecesdetamao decrecienteocreciente}.Portanto,eltamaodelasecuenciadelconjuntodedatosdeberaser aleatorio.Essiempreunabuenaideaescribirunafuncinseparadaparalainicializacin. Cmotomarlaentradaderealesenmatrices? Consideradelsiguientesegmentodecdigo:
#include <stdio.h> float store[100]; void main(void) { int j; for(j=0;j<100;j++) scanf("%f",&store[j]); }

Cuandoesteprogramaseejecute,muchoscompiladoresdeC/C++mostrarnelerror"Formatode ComaflotantenoEnlazado".Paraeliminaresteerror,tanslohacefaltatomarlaentradaenuna variablenormaldecomaflotante,yentoncesasignardichavariablealamatriz,talcomosigue:


#include <stdio.h> float store[100];

void main(void) { int j; float temp; for(j=0;j<100;j++) { scanf("%f",&temp); store[j]=temp; } }

SugerenciasdeMarkDettingersobrelosproblemasde geometra
MarkDettingereraelentrenadordelaUniversidaddeULM.Mesugiriqueavecesesbuenaidea evitarlosproblemasdegeometraamenosqueunotengarutinasyaescritas.Lasrutinasquepuedenser tilesson: 1.Interseccindedosrectas 2.Interseccindedossegmentos 3.Interseccinderectaysegmento 4.Convexidaddeunasuperficie/bveda/curva{Cascoconvexo} 5.Puntointerioraunpolgono 6.Desdeungrannmerodepuntos,cualeselnmeromximodepuntosenunaslarecta 7.Elproblemadelparmscercano(Dadounconjuntodepuntos,tenisqueencontrarelpardepuntos mscercanoentreellos) 8.Trataddeaprendercmoseusalafuncinqsort()deCparaordenarenterosyregistros. 9.Elreadeunpolgono(ConvexooCncavo) 10.Centrodegravedaddeunpolgono(ConvexooCncavo) 11.CircunferenciaMnima(Paraunnmerodadodepuntosjuntoconsuscoordenadas,encontrarla circunferenciaconradiomnimoquelesincluyaatodos) 12.EsferaMnima 13.Siunrectnguloentra{esinteriora}enotrorectngulo(inclusorotndolo) 14.Interseccindedoscircunferencias.Sinoseproducelainterseccin,detectarlasituacin(siuno estdentrodelotro,osiestnlejos) 15.Algoritmosderecortederectas(contraunrectngulo,crculo,elipse). Corregiraljuez! Losjuecesavecesomiteninformacinquedeberanhaberdado.Porejemplo,losjuecesdemipasdan elerror"LmitedeTiempoExcedido"peronuncadicencualesellmitedetiempo.EnValladolid, normalmentenoseespecificaeltamaodelaentrada(porejemplo,elproblema497Iniciativade defensaEstratgica).Deformaquetratadde{sonsacar}alosjueces. Suponedquenoosdanelnmeromximodeentradas.Normalmenteestoesunainformacinvitalpor quesielnmeroespequeo,podisusarbacktracking,ysiesgrande,tenisqueusartcnicascomo programacindinmicaobacktrackingconmemorizacin.Enelproblema497,nosedaelposible nmeromximodemisilesainterceptar.Suponedqueelbuclefor(j=0;j<;100000000;j++)necesita1 segundodeejecucinparaeljuez,yqueNeselnmerodeentradasdadasporeljuezvirtual,peroque

nosabissuvalor.Entonces,enviadelsiguienteprogramaconvuestrocdigo.Ponedlojustoantesde quehayissabidoelvalordeN:
for(I=1;I<=20;I++) { if(I*1000>=N) { for(j=0;j<I*100000000;j++); } }

Ahora,delaejecucindeesteprogramapodisdeducirelnmerodelaentradaN.Usandoestemtodo tambinpodisdeterminarcuantomsrpidoeselordenadordeljuezqueelvuestro,yasaveriguarel lmiteaproximadodetiempoparacualquierproblemaenvuestroordenador.Lamayoradelos concursosenvivotienenunasesindeprcticaantesdelconcurso.Eseda,debistratardedeterminar lavelocidaddelordenadordeljuezenviandomuchosprogramasqueconsistandemuchosbuclesy buclesanidados. (

LaHistoriadelProblemadelaFinalMundialdel2000:
SabiasquehubounerrorenelproblemadelaFinalMundialdel2000?.Elproblemaculpableerael problemaF.Laespecificacindelproblemadecaqueelgrafodeentradadebasercompleto,perono todaslasentradasdeljuezerangrafoscompletos.Unodelosequipos<;puedequeotrostambin> enviaronunprogramaquecomprobabasielgrafodeentradaeracompleto.Sielgrafodeentradaera incompleto,entoncessuprogramaentrabaenunbucleinfinito.Deformaquelarespuestadeljuezera "LmitedeTiempoExcedido".Deestarespuestaellosfueroncapacesdededucirquealgunodelos grafosdeentradaeraincompleto,yresolvieronelproblemadeacuerdoconesto.) Usaddobleprecisinenlugarderealessimples(doubleenlugardefloat) Essiemprebuenaideausarun'double'enlugardeun'float',puestoqueel'double'damsprecisiny rango.Recordadsiemprequeexisteuntipodedatosllamado'longdouble'.EnelC/C++deUnix/Linux, haytambinun'longlonginteger',yelJuezVirtualcorrebajoLinux.Algunasvecesseespecificaenel enunciadodelproblemaelusodeltipo'float'.Enesoscasos,usad'floats'. Usoavanzadodeprintf()yscanf() Aquellosquehayisolvidadoelusoavanzadodeprintf()yscanf(),recordadlossiguientesejemplos: scanf("%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]",&linea); //dondelineaesunacadena Estallamadaalafuncinscanf()tomaslolasletrasmaysculascomoentradaparalalnea,y cualquierotrocarcterquenoseaA..Zfinalizalacadena.Deformasimilar,lasiguientellamadaala funcinscanf()secomportarigualqueungets(): scanf("%[^\n]",linea);//dondelineaesunacadena Aprendedloscaracteresfinalizadorespordefectodelafuncinscanf().Intentadleertodaslas caractersticasavanzadasdescanf()ydeprintf().Estoosayudaralalarga. Usodenuevalneaconscanf()

Sielcontenidodeunarchivo(input.txt)es: abc def yelsiguienteprogramaseejecutaparaquetomelaentradadelarchivo: charinput[100],ch; voidmain(void) { freopen("input.txt","rb",stdin); scanf("%s",&input); scanf("%c",&ch); } Culserelvalordeinputych? Aqutenemosunamodificacindelcdigo: charinput[100],ch; voidmain(void) { freopen("input.txt","rb",stdin); scanf("%s\n",&input); scanf("%c",&ch); } Culsersuvalorahora? Elvalordechser'\n'paraelprimersegmentodecdigo,y'd'paraelsegundo. Memorizadelvalordepi Siempredeberaisintentarrecordadelvalordepicontantosdecimalescomoseaposible. 3.1415926535897932384626433832795,quizlaparteennegrita.Puedequelosjuecesnoosdenel valorenlapregunta,ysiusisvalorescomo22/7o3.1416o3.142857,esmuyposiblequealgunadelas entradascrticasdelosjuecesosdenlarespuestaporincorrecta.Tambinpodisobtenerelvalordepi comounaconstantedefinidaporelcompilador,odelsiguientecdigo: pi=2*acos(0); Problemasconlaigualdaddenmerosencomaflotante(precisindobleosimple) Nosiemprepodiscomprobarlaigualdaddenmerosencomaflotanteconeloperador==enC/C++. Lgicamente,susvalorespuedenserlosmismos,perodebidoallmiteenlaprecisinyaerroresde redondeopuedendiferirenunapequeacantidad,ypuedenserconsideradosdesiguales incorrectamenteporvuestroprograma.Portanto,paracomprobarlaigualdaddedosnmerosayben comaflotante,podisusarunfragmentodecdigocomoelquesigue: if(fabs(ab)<;ERROR)printf("Soniguales.\n"); Aqu,ERROResunvalorencomaflotantemuypequeo,algoascomo1e15.Enrealidad,1e15esel

valorpordefectoquelosjuecesescritoresdesolucionesusan.Estevalorpuedecambiarsesila precisinseespecificaenelenunciadodelproblema. Losastutosjueces... Losjuecessiempretratandehacerlargoslosenunciadosdeproblemasfcilesylosenunciadosdelos problemasdifcilesmscortosparahacerlosparecermuyfciles.Porejemplo,unenunciadodeun problemapuedeser:"Encontrarelreacomndedospolgonos".Elenunciadoessencillo,perola solucinesmuydifcil.Otroejemploes:"Paraunnmerodadoencontrardosnmerosigualescuyo productoseaigualaesenmerodado".Aunqueelsegundoenunciadoesmslargoqueelprimero,el enunciadodelsegundoproblemaslopreguntaencontrarlarazcuadradadeunnmero,quesepuede hacerusandounafuncinpredefinidadelcompilador. Usadlafuncinassert() CasisiempreestbienusarlafuncindeC/C++assert(),queestenelficherodecabeceraassert.h. Conlafuncinassert(),podiscomprobarelvalorpredefinidodeunavariableodeunaexpresinen unaciertaetapadevuestroprograma.Siporalgunarazn,lavariableoexpresinnotieneelvalor especificado,assert()imprimirunmensajedeerror.EchadleunvistazoaladocumentacinC/C++ paramsdetalles. Evitarlarecursividad Siempreesbuenaideaevitarlarecursividadenlosconcursosdeprogramacin,pueslarecursividad llevamstiempo,ylosprogramasrecursivosabortanlaejecucindemaneramuchomsfrecuente (especialmenteenelcasodeun{anlisis}),yparaalgunagenteesmuchomsdifcildedepurar.Pero larecursividadnodeberaestardescartadaporsistema,puesmuchosproblemassonmuysencillossise resuelvenrecursivamente(DFS,backtracking),yhaygentealaquelegustapensarrecursivamente.Sin embargo,esunmalhbitoresolverproblemasdeformarecursivaquepuedenserresueltosfcilmente deformanoiterativa,comoporejemploelfactorialdeunnmero,lageneracindelaseriede Fibonacci,ylabsquedaprimeroenanchura.Enlosconcursosdeprogramacinenvivo,novalela penaescribircdigoclsico.Elcdigoclsicoes{tacao},normalmentedifcildecomprenderyde depurar,aunquemuestrelabrillantezdelprogramador.Comoporejemplo,elcdigoparaintercambiar dosvalores,quepuedeserescritodeformaclsicacomosigue: #defineswap(xxx,yyy)(xxx)^=(yyy)^=(xxx)^=(yyy) Sinembargo,enunconcursonoconseguirispuntosextraporestetipodeimplementacin. Mejoradvuestracomprensindelaprobabilidadydelosjuegosdecartas Tenerunabuenacomprensindelaprobabilidadesvitalparaserunbuenprogramador.Siqueris medirvuestracomprensindelaprobabilidad,resolvedelproblema556deValladolidy{sufrid}un librodeestadsticasobreprobabilidad.Aprendeosteoremasdeprobabilidad,sucesosdependientese independientes,yprobabilidaddelcara/cruz.Tambindeberaissercapacesderesolverlosproblemas comunesrelativosajuegosdecartas. Tenedcuidadoalusargets()yscanf()alavez Deberaistenercuidadoalusargets()yscanf()enelmismoprograma.Probadloconelsiguientecaso. Elcdigoes: scanf("%s\n",&dummy); gets(nombre);

Ysielficherodeentradaes: ABCDEF bbbbbXXX Qutendraiscomovalordelnombre?"XXX"o"bbbbbbXXX"(Aqulabsignificaunespacio).

SugerenciasparalosJuecesOnlinebasadosenUNIXyparalosconcursos
PortabilidaddeFunciones NotodaslasfuncionesC/C++disponiblesenDOSloestnenUNIX.Comprobadladocumentacin paraverlaportabilidadentredistintossistemasoperativos.SiunafuncinesportableaUNIX,podis usarlapararesolverproblemasenlapginadeValladolidydelUSU.Usadsloentradaestndary funcionesdesalidaparatomarentradasyproducirsalidas. itoa(),lafuncinimportantequeUNIXNOtiene UNIXnosoportalatilfuncinitoa().Unmododesustituirestafuncinpuedeser: charnumstr[100]; intnum=1200; sprintf(numstr,"%d",num);//adecimal sprintf(numstr,"%X",num);//ahexadecimalenmaysculas IntentadsustituircualquierotrafuncinquenoestdisponibleenUNIX/LINUX. Problemasconlaconfiguracindelprogramadecorreo Algunosproblemasnosernaceptadosinclusocuandoestncorrectamenteresueltos.Talesproblemas sonel371lafuncindeAckermann,el336unnododemasiadolejano,el466espejo,espejo,etc... Estosedebeaquenuestrosprogramasdecorreoelectrnico(porejemplo,elOutlookExpress,el Eudora,etc...)rompenlaslneasmslargas,yestosproblemastienenlneaslargasensusalida.Asque enelOutlookExpressdeberaisiraHerramientas>Opciones>Envo>ConfiguracindeEnvode Texto,ycambiarlaopcinde{AutomaticallyWrapText}de76(pordefecto)a132.Sepueden encontraropcionessimilaresenotrosprogramasdecorreo.ElJuezVirtualdeUSUtieneunimpresode entregadeprogramaconelquepodisenviardirectamentevuestroprogramasinenviarunemail. Recordadqueelproblemaconlosparmetrosdelprogramadecorreopuedecausartantounarespuesta errneacomounerrordecompilacin. Queselerrordepresentacin? Loserroresdepresentacinsonerroresquenoestncausadosporerroresalgortmicosnilgicos.Hay unadiferenciaentreelerrordepresentacindelosjuecesvirtualesyeldelosjuecesenvivo.Los ltimossoncapacesdedetectarlosfallos,comofaltasdeortografa,palabrasextra,espaciosextra, etc...ydiferenciarlosdeloserroresalgortmicos,como{coste}errneo,decisioneserrneas,etc...Estos erroressonloserroresdepresentacintalcomolosclasificanlosjueceshumanos.Porotrolado,los juecesvirtualescomparanlasalidadeljuezyladelconcursanteconlaayudadeunprogramade comparacindeficheros,deformaqueinclusolasfaltasdeortografapuedencausaruna"respuesta errnea".Generalmente,cuandoelprogramadecomparacindeficherosencuentralneasadicionales, stasseconsideranerrordepresentacin.Losjueceshumanos,porelcontrario,nosuelendetectar estoserrores.Pero,hoyenda,losordenadoressevanvolviendomspotentes,seusanentradasde juiciomsgrandesysegeneranarchivosdesalidamsgrandes.Portanto,enlosconcursosenvivo,se

usanprogramasjuezespecialesquepuedendetectarerroresdepresentacin,mltiplessoluciones correctas,etc...Avanzamoshacamejoresjuicios{correcciones}yhaciaunamejorhabilidadde programacin.EstadsticasrecientesdeACM[5]demuestranquelaparticipacinenelConcursode ProgramacinparaColegiadosdeACMseestincrementandodrsticamenteyqueenunfuturo cercanoseintensificarlacompeticinenelconcursodeprogramacin.Asquelamejoradelsistema dejuicioescasiunanecesidad. Unerrorcomndelosconcursantes Recientemente,heorganizadovariosconcursos(encolaboracinconRezaulAlamChowdhuryyen colaboracinconlaUVA)yhevistocmolosconcursantescometenmuchoserrorestontos.Elerror msdestacableesdarlascosasporhechas.Enunproblema,especifiququelasentradasseranenteros (talcomosedefinenenmatemticas)peronoespecifiquelrangodeentradaymuchosconcursantes asumieronqueelrangosera0..(2^321).Pero,enrealidadsedieronmuchosnmerosgrandescomo entrada.Eltamaomximodelficherodeentradaseespecificabadeloqueunopodraasumirqueera elnmeromximoposible.Habatambinalgunosnmerosnegativosenlaentrada(losenterospueden sernegativos). Lascausasdeunerrordecompilacin ElerrordecompilacinesunerrorcomnenlapginadeValladolid.Puedeparecersorprendenteel compilaryejecutarunprograma,envirseloalJuezVirtualyobtenerunerrordecompilacin.Las causasmscomunesparaesteerrorson: 1.Laomisindelosficheros#include: Algunosdeloscompiladoresqueusamosnorequierenincluirlosficherosdecabecerainclusocuando usamosfuncionesbajoestosficherosdecabecera.PeroelJuezVirtualnuncalopermite.Porejemplo, algunasfuncionesexistentantoenmath.hyenstdlib.h.ParaelJuezVirtual,necesitasincluirambos ficherosdecabecerasiquieresusardichasfunciones. 2.Noespecificarellenguajecorrecto: Otracausadel"ErrodeCompilacin"esnoespeficiarellenguajecorrecto.Normalmente,cuando programamosenC,usamoslasfacilidadesdisponiblesenC++,yentoncesespecificamosellenguaje comosifueseCyobtenemosunerrordecompilacin.Porejemplo,elsiguientepuedesercompilado comounprogramadeCennuestroentornoDos/Windows,peronoenUNIX/LINUX(losJueces Virtuales). for(inti=0;i<;100;i++) { printf("ErrordeCompilacin\n"); } 3.Elformatodeenvodelosemail LosemailenviadosalJuezVirtualdeberanestarenformatodetextoplano.Sieltipodeemailes textoenriquecidooHTML,elprogramanosecompilar.Nodeberaisenviarvuestroprogramacomo unattachment. 4.Loscaracteresmisteriosos

CuandoempecaprogramarparaValladolidalprincipio,usabaTurboC++.Despusdequeacab satisfactoriamenteunprograma,abrelcdigofuenteconelBlocdeNotas,selecciontodoeltexto,lo copiylopeguenmieditordecorreo,ydespusloenvialapginadeValladolidyobtuveunerror decompilacin.Nopudedescubrirlacausa.Unda,lopeguenmieditordecorreo,lograbcomoun ficherodetexto,despusloabrenmieditordetextodelDOS,ydescubralgunoscaracteres misteriososenelficherodetexto,queeraninvisiblesenWindows.Yanohevueltoatenerelmismo problema.Sialgunosdevosotrosobtenisunerrordecompilacinporrazonesdesconocidas,porfavor comprobadsistaeslarazn.As,siobtenisunmensajedeerrordecompilacinynopodis descubrirlacausa,comprobadsivuestroprogramadecorreooeditordetextoestaadiendosmbolos adicionalesavuestrocdigo. 5.Elusodefuncionesnoportables LoserroresdecompilacinestncausadosporelusodefuncionesquesloestndisponiblesenDOSy noenLINUX,comostrrev(),itoa(),etc... 6.ElusodecomentariosdeestilodelC++ ElC++permitecomentariosdeestiloquecomienzancon//.Sielprogramadecorreorecortael comentarioadoslneas,podisencontrarosconunerrordecompilacin.

AlgunassugerenciasespecficasparaValladolid
LassiguientessonvariassugerenciasparalaresolucindeproblemasparaelJuezVirtualde Valladolid: TiposdeentradaenelJuezVirtualdeValladolid ExistencuatrotiposdeentradaenelJuezVirtual(ltimocambio) 1.Entradanomltiplesinprogramaespecialdecorreccin(BanderaRoja) 2.Entradanomltipleconprogramaespecialdecorreccin(BanderaNaranja) 3.Entradamltiplesinprogramaespecialdecorreccin(BanderaAzul) 4.Entradamltipleconprogramaespecialdecorreccin(BanderaVerde) Quesunprogramadecorreccinespecial? Existenalgunosproblemasqueslotienenunanicasalidaparaunanicaentrada,perootros problemaspuedentenermsdeunasalidaparalamismaentrada.Porejemplo,siospreguntancuales lacadenadelongitud3quemsapareceenlacadena"abcabcabcijkijkijk",desafortunadamentela respuestapuedesertanto"abc"como"ijk".Portanto,sivuestroprogramadevuelve"abc",escorrecto, sidevuelve"ijk"estambincorrecto.Elprogramajueznopuededeterminarlacorreccindevuestro programasimplementecomparandovuestrasalidaconladelprogramadeljuez.Eljuezdebeescribir unprogramaespecial,queleervuestrarespuestaydeterminarsiescorrectaono.Esteprograma especialsedescribecomounprogramaespecialdecorreccinenelJuezVirtualdeValladolid.Paralos problemasconprogramaespecialdecorreccin(Problemas104,120,135,etc...olosprogramascon banderaverdeonaranja)nipodisestarsegurosdequevuestroprogramaseaincorrectoinclusosila salidadevuestroprogramanocoincideconlasalidadeejemploparaunaentradadadadeejemplo. Los"ProgramasdeEntradaMltiple"sonuninventodelJuezVirtual.Heaqularaznporlaquehan nacidolosprogramasdeentradamltiple.ElJuezVirtualutilizanormalmentelosproblemasylos datosqueseusaronenlosconcursosenvivo.Hayalgunosproblemasenlosconcursosenvivocuyas solucionestomanunsoloconjuntodedatos,dalasalidacorrespondiente,ytermina.Estonoimplica

quelosjuecesdenslounconjuntodedatos.Enrealidadlosjuecesdanvariosficheroscomoentrada, unodespusdeotro,ycomparanloscorrespondientesficherosdesalidaconlasalidadeljuez.Sin embargo,lapolticadelJuezVirtualdeValladolidesdiferente.Siempreprefieredarunnicoarchivo comoentrada.Insertatodaslasentradasdeljuezenunnicoficheroyenelcomienzodeesefichero escribecuantosconjuntosdedatoshabr.Estenmeroeselmismoqueelnmerodeficherosde entradoqueusanlosjuecesdelconcurso.Unalneaenblancoseparacadaconjuntodedatos.Portanto, laestructuradelficherodeentradaparaunprogramadeentradamltipleescomosigue: integerN//quedenotaelnmerodeconjuntosdeentrada lneaenblanco conjuntodeentradas1/*comoestdescritoenelenunciadodelproblema*/ lneaenblanco conjuntodeentradas2/*comoestdescritoenelenunciadodelproblema*/ lneaenblanco conjuntodeentradas3/*comoestdescritoenelenunciadodelproblema*/ . . . lneaenblanco conjuntodeentradasN/*comoestdescritoenelenunciadodelproblema*/ finaldelfichero Fijaosenquenohaylneaenblancodespusdelltimoconjuntodedatos(avecespuedehaberla,por tanto,comprobadambasposibilidades).Laestructuradeunficherodesalidaparaunaentradamltiple ser: salidaparaelconjunto1/*comoestdescritoenelenunciadodelproblema*/ lneaenblanco salidaparaelconjunto2/*comoestdescritoenelenunciadodelproblema*/ lneaenblanco salidaparaelconjunto3/*comoestdescritoenelenunciadodelproblema*/ lneaenblanco . . . lneaenblanco salidaparaelconjuntoN/*comoestdescritoenelenunciadodelproblema*/ finaldefichero ElJuezVirtualdelaUSUnotieneprogramasdeentradamltiplecomoeldeValladolid.Prefieredar mltiplesficheroscomoentradayasignauntiempolmiteparacadaentrada. ProblemasdelosProgramasdeEntradaMltiple Existenalgunospuntosquedeberaisconsiderarparalosprogramasdeentradamltiple. 1.Inclusosilaespecificacindeentradadicequelaentradaterminaconelfinaldefichero(EOF),cada conjuntodeentradasfinalizaenrealidadconunalneaenblanco,exceptoparaelltimo,quetermina conelfinaldefichero. 2.Tenedcuidadoconlainicializacindelasvariables.Sinoseinicializandeformacorrecta,vuestro programapuedefuncionarparaunnicoconjuntodedatosperodarsalidacorrecta{incorrecta}para

variosconjuntosdedatos.Todaslasvariablesglobalesseinicializanasuscorrespondientesceros.As, paraunnicoconjuntodeentradas,lainicializacinpuedenosernecesaria,peroparamltiples entradas,esunrequisito. Laseccinde"ArreglandoErrores" AseguraossiempredeecharleunvistazoalaseccindeArreglandoErroresdelJuezdeValladolid. AlgunosdelosproblemasdelJuezVirtualdeValladolidtienenerrores.Algunosdeloserroressehan corregidoenestapgina. LeerelTablndeMensajes IntentadsiempreleereltablndemensajesdelsitiodeValladolid.Aprenderismuchascosasdeotros programadores.ElJuezVirtualdelaUSUtambintieneuntablndemensajes.Podistambinenviar vuestrospropiospuntosdevistayproblemaspormediodeestostablones.

Conclusin
Muchagentetienelaideageneraldequeaquelqueconocemsalgoritmoseselmejorprogramador. Perocomoenelproverbio{"Therearemanyaslipinbetweenthecupandthelip"},estaideanoes cierta.Paraserunprogramadormejor,necesitastenerunamuybuenacomprensindelasmatemticas. Laresolucindeunmontndeproblemasdematemticasteayudaramejorartucapacidadanaltica, queeselrasgomsimportantedeunbuenprogramador.Mehedadocuentadequeresolvertipos diferentesdeproblemasdegeometraayudaespecialmenteenlamejoradelacapacidadanalticade cualquiera.Comoconcursantes,nodebisnuncaperderlosnerviosduranteunconcurso.Nopodisser mejoresprogramadoresdeloquerealmentesois,peroenelconcursodeberaisintentarhacerlosiempre lomejorquepodis.

Referencias
1 AstrachanO.,KheraV.andKotzD..TheInternetProgrammingContest:AReportand Philosophy 2 ChowdhuryR.A.andManzoorS.Orientation:NationalComputerProgrammingContest2000 PresentedintheOrientationofBangladeshNationalProgrammingContest,2000. 3 ErnstF.,MoelandsJ.andPieterseS.TeamworkinProgrammingContests:3*1=4Published inissue3.2ofCrossroads 4 KaykobadM.BangladeshiStudentsintheACMICPCandWorldChampionshipsPublishedin aleadingComputerWeeklyinBangladesh. 5 PoucherW.B.ACMICPC2001RCDRemarksPresentedinRCDMeetingofWorldFinals 2001. 6 VerhoeffT.GuidelinesforProducingaProgrammingContestProblemSet: http://wwwpa.win.tue.nl/wstomv/publications/guidelines.html

Enlacestiles

ACMICPCProblemSetArchive:http://www.acm.inf.ethz.ch/ProblemSetArchive.html ACMInternationalCollegiateProgrammingContestwebpage:http://acm.baylor.edu/acmicpc/ AmericanComputerScienceLeagueACSLHomepage:http://www.acsl.org/acsl/ ACMHomepage:http://www.acm.org/ AmericanComputerScienceLeagueACSLHomepage:http://www.acsl.org/acsl/ CEOIResourcePage:http://aldona.mii.lt/pms/olimp/tarpt/ceoi.html InformaticsCompetitionsLinkPage:http://olympiads.win.tue.nl/ioi/misc/other.html InternetProblemSolvingContestwebpage:http://ipsc.ksp.sk/ InternationalOlympiadinInformaticswebpage:http://olympiads.win.tue.nl/ioi/index.html MarkDettinger'sHomePage:http://www.informatik.uniulm.de/pm/mitarbeiter/mark/ NewPOTMMaster'sHomepage:http://contest.uvarov.ru/ PC^2Homepage:http://www.ecs.csus.edu/pc2/ POTMMaster'sHomepage:http://members.tripod.com/~POTM/fah_home.html ProblemSetArchive2:http://www.mimuw.edu.pl/oi/archiwum/ UralStateUniversityProblemSetArchivewithOnlineJudgeSystem:http://acm.timus.ru/ UniversityWaterlooContestPage:http://plg.uwaterloo.ca/~acm00/ Valladolid24hourOnlineJudge:http://acm.uva.es/problemset ValladolidOnlineContestHostingSystem:http://acm.uva.es/contest ValladolidProblemslink:104,120,135,371,336,466,497.

Biografa
ShahriarManzoor(shahriar@neksus.com)esestudiantedeB.ScenlaUniversidaddeBangladesde IngenierayTecnologa(BUET).ParticipenelConcursoRegionaldeACMde199enDhakaysu equipoquedtercero.Losdosprimerosequiposdeeseconcursoquedaron8y11enlaFinalMundial. Seperdilafaseregionaldel2000debidoaenfermedad.Esunmuybuenorganizadordeconcursos, aunquenomuchosseloreconozcan.HaorganizadoseisConcursosatravsdeInternetenelJuez VirtualdeValladolid(http://acm.uva.es/contest/),incluyendo"ElConcursodeCalentamientodela FinalMundial".SusinteresesdeinvestigacinsonlosalgoritmosylasaplicacionesWeb{basadasen Web}.

Agradecimientos
ShariarManzoorquiereagradeceralProfesorMiguelA.RevillahaberledejadoorganizarConcursosa travsdeInternetyalprofesorWilliamB.Poucherporhaberpedidoagentequeparticipaseen"El ConcursodeCalentamientodelaFinalMundial".TambinquieredarlelasgraciasaCiriacoGarca, AntonioSnchez,F.P.NajeraCano,FuZhaohui,Dr.M.Kaykobad,RezaulAlamChowdhury,Munirul Abedin,TanbirAhmed,ReuberGuerraysobretodoasufamilia. LastModified: Location:www.acm.org/crossroads/espanol/xrds75/contests.html