ONI'2005
Aspectos práticos da resolução dos problemas do concurso
Este documento
contém informação prática relevante para a resolução dos problemas apresentados
nas Olimpíadas Nacionais de Informática.
Restrições durante a compilação dos programas
Estas são estas as
restrições impostas pelo sistema de avaliação, durante a compilação de
programas:
- Tempo máximo de compilação: 60 segundos.
- Tamanho máximo dum programa: 100 Kbytes.
- Cada programa tem de ficar integralmente incluido num único ficheiro.
Opções de compilação
É indispensável conhecer as opções de compilação
que o sistema de avaliação automático usa. Por exemplo, sabia que a compilação é
efectuada com todos os warnings ligados, em C, C++ e Pascal?
Para evitar dissabores, ao testar cada solução, é importante usar as mesmas
opções de compilação do avaliador automático!
Eis as opções de compilação que o sistema de avaliação usa, para as diversas
linguagens:
- gcc -Wall -lm
- g++ -Wall
- fpc -v0w
Software no Linux
Ambiente:
Compiladores:
Editores:
- gedit, vi, joe, emacs, anjuta, eclipse
Utilização básica (para iniciados):
- "Internet > Navegador Web" abre um browser WEB.
- "Acessórios > Editor de Texto" abre um editor de texto.
- "Ferramentas do Sistema > Consola" abre uma consola onde é possível dar os comandos de compilação
Software no Windows
Ambiente:
Compiladores:
- Visual Studio .NET 2003
- fpc 0.9.2 (fpc.bat)
Editores:
- Visual Studio, Notepad, etc.
Restrições durante a a execução dos programas
Estas são estas as
restrições impostas pelo ambiente de execução dos programas:
- Tempo máximo de CPU: 5 segundos
- Memória disponível para variáveis globais e dinâmicas: 32 megabytes
- Memória disponível para pilha de execução e variáveis locais: 2 megabytes
Os recursos disponíveis são largamente suficientes para resolver
qualquer problema do concurso, independentemente da linguagem usada.
Dados de entrada
Os dados de entrada, usados para testar as soluções dos
concorrentes, são lidos da entrada padrão. Consistem em texto cuidadosamente
formatado para ser simples de processar:
- Normalmente, nas primeiras linhas dos dados de entrada surgem alguns
números inteiros que anunciam o tamanho das diversas partes do texto que se
segue. Isso evita a necessidade de testar a condição de "fim-de-ficheiro",
durante a leitura dos dados.
- A última linha do ficheiro está sempre devidamente terminada por uma
mudança de linha.
- Espaços em branco, quando usados, são sempre considerados como
separadores. Os espaços em branco nunca ocorrem em grupos. Uma linha
nunca começa com um espaço em branco. Uma linha nunca acaba com um espaço em
branco.
Note que as linhas com números inteiros que ocorrem no início
dos dados de entrada devem ser consumidas bem até ao fim para evitar
desalinhamentos na leitura dos dados subsequentes. Eis como isso se faz nas
várias linguagens:
Supondo que os dados se inicia por uma linha contendo dois inteiros
separados por um espaço em branco:
C
int n, m ;
scanf("%d %d", &n, &m) ;
getchar() ; /* Salta a mudança de linha. */
C++
int n, m ;
std::cin >> n >> m ;
getchar() ; /* Salta a mudança de linha. */
Pascal
n, m : Integer ;
readln(n, m) ;
Dados de saída
Os dados de saída, produzidos pelos programas dos
concorrentes, são escritos na saída padrão. É necessário respeitar rigorosamente
o formato exigido no enunciado. Qualquer desacerto, mesmo ligeiro, é suficiente
para que um programa seja classificado como "Presentation error".
Note que não é possível detectar visualmente certas anomalias nos dados de
saída. Por exemplo: um espaço em branco no final duma linha, uma linha em branco
no final dos dados, a omissão da mudança de linha na última linha dos dados.
Todas estas situações são inaceitáveis e provocam um "Presentation error".