Document

Propaganda
1
VIII Olimpíada de Programação
Regras de Funcionamento
1. As questões serão anunciadas no início da Olimpíada, às 8h00min. Os participantes terão 3
horas para apresentar soluções, na forma de implementação desenvolvida em qualquer dos
compiladores previstos: C++ DEV-C++, C DEV-C++, C++ Visual C++, JAVA, GCC e G++.
2. A prova deverá ser resolvida individualmente.
3. Os trabalhos serão avaliados automaticamente pelo sistema BOCA.
4. Quando um participante julgar que tem um programa que resolve um problema, deverá
submetê-lo à correção do juiz eletrônico, que compilará e executará o mesmo para uma
bateria de testes desconhecida dos participantes. Um problema será considerado resolvido
se, para todos os testes da bateria, devolver o resultado esperado pelo juiz. Para cada
submissão o participante receberá uma resposta, que poderá ser satisfatória (e o problema
está resolvido) ou indicará algum erro: resposta errada, tempo de execução excedido, erro de
execução, erro de compilação, etc.
5. Será considerado vencedor aquele que resolver a maior quantidade de problemas nas 3
horas de competição. Empates no número de problemas resolvidos serão classificados pelo
tempo corrigido. Ganhará aquele que tiver o menor tempo corrigido. O tempo corrigido será
dado pela soma dos tempos corrigidos somente dos problemas corretamente resolvidos pelo
participante. O tempo corrigido de um problema será dado pelo número de minutos
decorridos desde o início da competição até o momento da submissão correta somado a uma
penalidade de 20 minutos por submissão incorreta feita anteriormente neste problema. Em
caso de empate, será considerado vencedor o participante que tiver a primeira submissão
correta. Persistindo o empate, a organização fará um sorteio entre os participantes
envolvidos.
6. A organização da competição será responsável pela decisão de qualquer caso não previsto.
7. Material permitido para consulta: qualquer material impresso (livros, apostilas, códigos
impressos, etc.), e a ajuda (help) do sistema.
8. Não será permitido o uso da internet nem de qualquer dispositivo de armazenamento
eletrônico de dados (disquetes, pendrives, etc.).
9. Os participantes inscritos permitirão o uso e divulgação dos programas submetidos pela
organização da competição.
2
VIII Olimpíada de Programação
A – Bolas de Canhão
Arquivo fonte: bolas.c, bolas.cpp ou bolas.java
Enquanto WALL•E limpava e organizava a Terra despopulada, encontrou um memorial
de gerras civis. Ao agrupar as bolas de canhão em um único lugar ele decidiu utilizar
pirâmides com bases triangulares ao invés das quadradas.
Uma pirâmide com três lados também é conhecida como tetraedro.
Dado o número de bolas de canhão em cada lado da base, compute o número total de
bolas que formarão a pirâmide.
Entrada
A primeira linha contém um único número inteiro N representando o número de
pirâmides que serão formadas. As próximas N linhas serão compostas por um único inteiro
representando o número de bolas de canhão que serão utilizadas em cada lado da base da
pirâmide.
Saída
Para cada pirâmide seu programa deverá imprimir o número da mesma, começando
em 1, seguido de ‘:’ (dois pontos), seguido de um espaço, seguido do número de bolas
utilizadas em cada lado da base, seguido de outro espaço e finalmente o número total de
bolas do tetraedro.
Exemplos
Exemplo de entrada:
Saída esperada:
6
1
2
3
5
27
999
1:
2:
3:
4:
5:
6:
1 1
2 4
3 10
5 35
27 3654
999 166666500
3
VIII Olimpíada de Programação
B – Horas e minutos
Arquivo fonte: horas.c, horas.cpp ou horas.java
Dudu tem um relógio analógico no formato de um circulo como o da figura abaixo.
Dois ponteiros giram ao redor do centro indicando as horas e minutos. O relógio tem
60 marcas colocadas ao redor do seu perímetro com uma distância constante entre si. O
ponteiro de minutos se move da marca corrente para a próxima exatamente uma vez a cada
minuto. O ponteiro das horas se move da marca corrente para a próxima exatamente uma
vez a cada 12 minutos, portanto ele avança 5 marcas a cada hora. Considere que ambos os
ponteiros se movem de forma discrete e instantânea, o que significa que eles estão sempre
posicionados exatamente em cima de uma das marcas e nunca entre elas.
Dudu adora geometria e gosta de medir o ângulo mínimo entre os dois ponteiros em
diferentes horas do dia. Ele vem anotando algumas medidas, porém depois de vários anos e
uma extensa lista, ele percebeu que alguns angulos foram repetidos, enquanto outros nunca
apareceram. Por exemplo, a lista de Dudu indica que tanto às 3 horas quanto às 9 horas o
ângulo mínimo entre os dois ponteiros é 90 graus, enquanto um ângulo de 65 graus não
aparece na lista.
Dudu decidiu verificar, para cada número inteiro A entre 0 e 180, se existe pelo menos
um momento do dia que o ângulo mínimo entre os dois ponteiros do relógio é exatamente A
graus. Você pode ajudá-lo com um programa que responda esta pergunta?
Entrada
Cada caso de teste é descrito em uma única linha. Cada linha de teste contém um
inteiro A representando o ângulo a ser verificado.
O final da entrada é indicado por uma linha contendo o número -1.
Saída
Para cada caso de teste imprima uma linha contendo o caractere ‘Y’ se existir pelo
menos um momento do dia em que o ângulo minimo entre os ponteiros do relógio é
exatamente A graus e ‘N’ caso contrário.
Exemplos
Exemplo de entrada:
90
65
66
67
128
0
180
-1
Saída para o exemplo de entrada:
Y
N
Y
N
N
Y
Y
4
VIII Olimpíada de Programação
C – Flores de Fogo
Arquivo fonte: flores.c, flores.cpp ou flores.java
Nos dias atuais uma flor de fogo não é algo considerado estranho para muitos jovens.
Isso porque um famoso jogo de videogame popularizou esse tipo de flor. Nesse jogo o
protagonista ganhava superpoderes ao tocar em uma flor de fogo, passando a atirar
pequenas bolas de fogo para derrotar seus inimigos.
No entanto, já se falava sobre flores de fogo há muito tempo atrás. Na mitologia
polonesa, flores de fogo são flores místicas de grande poder guardadas por espíritos
malignos. Ela possuía esse nome porque brilhava tanto que era impossível olhá-la
diretamente. Quem possuísse uma flor dessas ganharia a habilidade de ler a mente de
outras pessoas, encontrar tesouros escondidos e repelir todos os males.
Para obter uma flor de fogo, a pessoa deveria procurá-la em uma floresta antes da
meia-noite na véspera do Noc Kupały. Exatamente à meia-noite ela floresceria. Para colhê-la
seria preciso desenhar um círculo em volta dela.
Parece uma tarefa fácil, no entanto, os espíritos malignos que guardam a flor
tentariam de tudo para distrair qualquer um tentando colher a flor. Se a pessoa falhasse ao
tentar desenhar um círculo em volta da flor, teria sua vida sacrificada.
Dados dois círculos, um desenhado por um ambicioso caçador de flores de fogo e
outro representando a área da flor, sua tarefa é determinar se o caçador morre ou fica rico
com sua conquista.
Entrada
A entrada é composta por diversos casos de testes. Cada caso consiste em uma linha
com seis inteiros, R1, X1, Y1, R2, X2, Y2. O círculo desenhado pelo caçador possui raio R1
e centro (X1; Y1). O círculo representando a área da flor possui raio R2 e centro (X2; Y2).
A entrada termina com uma linha contendo seis números 0 (zero).
Saída
Para cada caso de teste imprima uma única linha contendo ‘MORTO’, se o caçador
morre, ou ‘RICO’ se o caçador consegue colher a flor.
Exemplos
Exemplo de entrada:
6 -8 2 3 0 0
7 3 4 2 4 5
3 0 0 4 0 0
5 4 7 1 8 7
0 0 0 0 0 0
Saída para o exemplo de entrada:
MORTO
RICO
MORTO
RICO
5
VIII Olimpíada de Programação
D – Trabalho do Papa
Arquivo fonte: papa.c, papa.cpp ou papa.java
Karol Wojtyła nasceu em Wadowice em 1920, foi eleito papa João Paulo II em 1978 e
morreu em 2 de abril de 2005 após completar 26 anos de pontificado. Foi um dos poloneses
mais importantes da História. Antes de se tornar religioso, durante a segunda grande guerra,
Wojtyla trabalhou em uma fábrica de produtos químicos. Uma das tarefas de Wojtyła era
acomodar os pacotes de produtos químicos em pilhas para transportá-los.
O problema surgia do fato de que alguns destes pacotes eram muito pesados, e
outros tinham pouca resistência a ter peso sobre eles. Os gerentes da fábrica sempre
desejavam pilhas grandes, com o maior número possível de caixas.
Todas as caixas tinham associados dois números: seu peso em quilos e o peso,
também em quilos, que era capaz de suportar (incluindo o peso da caixa). Assim, uma caixa
de 25 quilos e resistência de 60 quilos era capaz de suportar no máximo 35 quilos em cima
dela.
Sua tarefa é, dada uma lista de caixas, com seus pesos e resistências, determinar o
número máximo de caixas que podem ser empilhadas sem ultrapassar a resistência de
nenhuma caixa da pilha.
Entrada
A primeira linha da entrada contém um inteiro T indicando o número de casos de
teste. A primeira linha de cada caso contém um inteiro N, indicando o número de caixas.
Cada uma das N linhas seguintes contém inteiros P e R, correspondendo, respectivamente,
ao peso e resistência de uma caixa.
Saída
Para cada caso de teste imprima, em uma única linha, o maior número de caixas que
podem ser empilhadas nas condições do enunciado.
Exemplos
Exemplo de entrada:
2
4
13 30
11 15
7 28
6 6
3
43 60
47 100
3 2
Saída para o exemplo de entrada:
3
2
6
VIII Olimpíada de Programação
E – Terra Média
Arquivo fonte: terra.c, terra.cpp ou terra.java
A Terra Média está para entrar em guerra. As forças do bem terão várias batalhas
contra as forças do mal. Certamente teremos várias raças envolvidas. Cada raça tem um
peso diferente na batalha. Do lado do bem temos as seguintes raças com seus pesos
associados:
 Hobbits - 1
 Humanos - 2
 Elfos - 3
 Anões - 3
 Eagles - 4
 Bruxos - 10
Do lado do mal temos:
 Orcs - 1
 Humanos - 2
 Wargs - 2
 Goblins - 2
 Uruk-Hai - 3
 Trolls - 5
 Bruxos - 11
Embora o tempo, o local, suprimentos e valores façam muita diferença em uma
batalha, se você somar o peso total do lado do bem e comparar com o peso total do lado do
mal, o lado com o maior peso tenderá a vencer.
Assim, dados a quantidade de cada raça do bem, seguida pela quantidade de cada
raça do mal, determine qual lado é o vencedor.
Entrada
A primeira linha da entrada irá conter um inteiro maior que 0 significando o número de
batalhas para processar. As informações para cada batalha serão compostas por duas
linhas: a primeira será uma linha contendo 6 números inteiros representando a quantidade
de cada raça do bem na mesma ordem apresentada acima; a segunda será composta por 7
números inteiros representando a quantidade de cada raça do mal, também na mesma
ordem apresentada acima.
Saída
Para cada batalha imprima “Batalha X: RESULTADO”, onde ‘X’ representa o número
da batalha começando em 1 e ‘RESULTADO’ será a frase ‘O Bem triunfa sobre o Mal’ se o
bem vencer, ‘O Mal extermina todos os vestigios do Bem’(sem acento) caso o mal vença ou
‘Sem vitória neste campo de batalha’(sem acento) no caso de empate.
7
VIII Olimpíada de Programação
Exemplos
Exemplo de entrada:
3
1 1 1 1 1 1
1 1 1 1 1 1 1
0 0 0 0 0 10
0 1 1 1 1 0 0
1 0 0 0 0 0
1 0 0 0 0 0 0
Saída para o exemplo de entrada:
Batalha 1: O Mal extermina todos os vestigios do Bem
Batalha 2: O Bem triunfa sobre o Mal
Batalha 3: Sem vitória neste campo de batalha
8
VIII Olimpíada de Programação
F – Gandalf
Arquivo fonte: gandalf.c, gandalf.cpp ou gandalf.java
Os escritos de Gandalf têm sido estudados há anos, porém ninguém conseguiu
descobrir em qual língua eles foram escritos. Recentemente, graças ao trabalho de alguns
hackers, descobriu-se que Gandalf usava nada além de um simples esquema de
substituição de letras, e consequentemente, a mesma operação poder ser usada para
esconder e recuperar a mensagem.
Esta operação é realizada trocando vogais na sequência (a i y e o u) com a vogal três
vezes a frente, de forma cíclica, preservando o estado (Maiúscula/Minúscula). De forma
similar as consoantes são trocadas na sequência (b k x z n h d c w g p v j q t s r l m f)
avançando 10 letras.
Por exemplo, a frase “One ring to rule them all.” é traduzida para “Ita dotf ni dyca nsaw
ecc.”.
Você foi contratado para escrever um código que traduza os manuscritos de Gandalf.
Entrada
A entrada é composta por vários casos de teste. Cada caso de teste será composto
por uma única linha contendo até 100 caracteres, representando algum texto escrito por
Gandalf.
O final da entrada será uma linha contendo um único caractere ‘-‘.
Saída
Para cada caso de teste da entrada, seu programa deve imprimir a tradução
equivalente.
Exemplos
Exemplo de entrada:
Ita dotf ni dyca nsaw ecc.
Tywpadh (1234567890)
-
Saída para o exemplo de entrada:
One ring to rule them all.
Numbers (1234567890)
Download