Regles

Els participants hauran de resoldre diverses menes de problemes:

  • Tipus test
  • Gràfics
  • Algorísmics i de programació

Els problemes del primer tipus no requereixen programar (necessàriament), només trobar la resposta adequada a un problema de tipus lògic, matemàtic o computacional. Són problemes similars als de la competició Cangur. Per a alguns d’aquests problemes, fer un programa pot servir per trobar-ne la solució més ràpidament.

Per als problemes del segon tipus cal implementar un programa en Python3 que generi una imatge en format PNG, seguint les instruccions d’aquest tutorial.

Els problemes del tercer tipus són els que apareixen majoritàriament a la competició pre-universitària International Olympiad in Informatics, i també seran els més comuns a l’oiCat. Per qüestions d’eficiència, el llenguatge habitual per resoldre aquests problemes és C++, però molts d’ells també es poden resoldre indistintament en C, Python3 o Java.

Com a norma general, hi haurà problemes dels tres tipus i de dificultats molt diverses. Cada problema resolt donarà un cert nombre conegut de punts en funció de la seva dificultat. Guanyarà qui obtingui la suma màxima de puntuacions. En cas d’empat, es tindrà en compte la penalització de temps acumulada en la resolució dels problemes (com menys millor).

Per resoldre un problema gràfic o algorísmic caldrà enviar un programa, el qual serà comprovat amb diversos jocs de proves privats, comparant-lo amb una solució correcta privada. El problema es considera resolt si el codi enviat compila, s’executa sense errors, triga com a màxim el doble del que triga la solució privada, i les sortides per a tots els jocs de proves són idèntiques a les de la solució privada. Aquest sistema de correcció és el mateix que usa Jutge.org.

Els enviaments incorrectes a qualsevol problema solament afectaran la penalització de temps (detallada més avall), i només en el cas que s’obtingui algun punt en el problema en qüestió. Per defecte, aquests problemes seran binaris: o se n’obtindran tots els punts, o cap. Per exemple, un problema que valgui 200 punts resolt a la tercera proporcionarà 200 punts.

Alguns problemes podran tenir puntuacions parcials, les quals estaran detallades en els enunciats. Per exemple, si cal fer un programa que, donat un nombre, comprovi si compleix una certa propietat, l’enunciat pot dir que es poden obtenir 50 punts si es resol el problema per a nombres més petits que 1000, i 150 punts més per a nombres més petits que un milió, per a un total de 200 punts.

Per calcular la penalització de temps de cada participant, per a cada problema es triarà l’enviament que li’n proporcioni la màxima puntuació. En cas d’empat, s’escollirà la solució que hagi enviat abans. Llavors, la penalització serà la suma dels minuts que s’ha trigat a enviar cadascuna de les solucions triades des de l’inici de la competició, més 20 minuts per a cada enviament previ en el mateix problema. (Aquestes regles són similars a les de la competició universitària ICPC.)

Per exemple, suposem que hi ha cinc problemes, i que un participant ha fet el següent:

  • El problema 1, que val 100 punts, l’ha resolt a la segona després de 42 minuts.
  • El problema 2, que val 200 punts, l’ha resolt a la tercera després de 94 minuts.
  • El problema 3 no l’ha intentat resoldre.
  • El problema 4 té puntuacions parcials de 70, 100 i 130 punts, per a un total de 300 punts. Hi ha fet sis enviaments, i ha obtingut puntuacions de 0, 70, 70, 170, 170 i 70 punts, respectivament. El quart enviament, que és el que compta, l’ha fet en el minut 80.
  • El problema 5 l’ha intentat resoldre, però no hi ha obtingut cap punt.

Llavors, la puntuació és de 100 + 200 + 170 = 470 punts.

La penalització de temps és de (42 + 20 x 1) + (94 + 20 x 2) + (80 + 20 x 3) = 336 minuts.

Els problemes es poden resoldre en qualsevol ordre, intercalant tant es vulgui enviaments a problemes diferents. A més, com que el primer criteri és la puntuació, sempre surt a compte intentar millorar-la, encara que això incrementi molt la penalització de temps.

En tot moment, cada concursant podrà conèixer els resultats de tots els enviaments de tots els participants per a tots els problemes. En particular, cada concursant podrà saber en tot moment quina és la seva posició dins de la classificació. Addicionalment, consultar la classificació de tant en tant permet detectar sovint els problemes que, independentment de l’opinió subjectiva dels organitzadors, estiguin resultant més fàcils de resoldre en general.

Els concurs classificatori i la final presencial duraran 4 hores. Seran competicions individuals, sense apunts, i només amb accés a la pàgina web on cal competir. L’usuari i el password són els mateixos que per entrar a Jutge.org. L’única documentació que es podrà consultar serà la inclosa a Jutge.org, en particular el tutorial de la STL de C++ i el dels gràfics en Python3.

Els concursos d’entrenament duraran una setmana sencera, perquè els participants puguin practicar tant com vulguin. Lògicament, els comptadors de temps en aquests concursos no aportaran informació significativa.

En els concursos de prova, molts dels problemes podran haver aparegut prèviament, per exemple a la col·lecció de Jutge.org. Els organitzadors intentarem que tant els problemes del concurs classificatori com els de la final siguin originals. En finalitzar els concursos, es presentaran solucions possibles de tots els problemes, els quals s’afegiran a la col·lecció de Jutge.org perquè qui vulgui els pugui intentar resoldre posteriorment.

Durant la final l’entorn de programació serà similar a aquest.

Els organitzadors de l’oiCat es comprometen a seguir totes aquestes regles en la mesura de les seves possibilitats. Davant de qualsevol imprevist, es prendran les mesures que es considerin oportunes, sempre buscant l’equanimitat. Les decisions dels organitzadors seran inapel·lables.