1 II Maratona de Programação FLF - 2013
1 II Maratona de Programação FLF - 2013
1 II Maratona de Programação FLF - 2013
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>II</strong> <strong>Maratona</strong> <strong>de</strong> <strong>Programação</strong> <strong>FLF</strong> - <strong>2013</strong><br />
Questões <strong>de</strong> Preparação<br />
Questão 4: Batalha Naval (Fonte: Olimpíada Brasileira <strong>de</strong> Informática 2010)<br />
Pedro e Paulo gostam muito <strong>de</strong> jogar batalha naval; apesar <strong>de</strong> serem gran<strong>de</strong>s<br />
amigos, Pedro <strong>de</strong>sconfia que Paulo não esteja jogando honestamente. Para tirar<br />
essa dúvida, Pedro <strong>de</strong>cidiu usar um programa <strong>de</strong> computador para verificar o<br />
resultado do jogo, mas Pedro não sabe programar e por isso pediu a sua ajuda.<br />
O jogo <strong>de</strong> batalha naval é jogado em um tabuleiro retangular com N linhas e M<br />
colunas. Cada posição <strong>de</strong>ste tabuleiro é um quadrado que po<strong>de</strong> conter água<br />
ou uma parte <strong>de</strong> um navio. Dizemos que dois quadrados são vizinhos se estes<br />
possuem um lado em comum. Se duas partes <strong>de</strong> navio estão em posições<br />
vizinhas, então essas duas partes pertencem ao mesmo navio. A regra do jogo<br />
proíbe que os quadrados <strong>de</strong> duas partes <strong>de</strong> navios distintos tenham um canto<br />
em comum (em outras palavras, que quadrados <strong>de</strong> duas partes <strong>de</strong> navios<br />
distintos compartilhem um vértice).<br />
Cada disparo que um jogador faz <strong>de</strong>ve ser feito em um dos quadrados do<br />
tabuleiro do outro jogador. Um jogador informa ao outro a coluna e a linha do<br />
quadrado alvo do disparo. Para que um navio seja <strong>de</strong>struído, o jogador <strong>de</strong>ve<br />
acertar todas as partes <strong>de</strong>ste navio. O jogador não po<strong>de</strong> atirar no mesmo lugar<br />
mais <strong>de</strong> uma vez.<br />
Tarefa<br />
Escreva um programa que, dadas a configuração do tabuleiro e uma sequência<br />
<strong>de</strong> disparos feitos por um jogador, <strong>de</strong>termina o número <strong>de</strong> navios do outro<br />
jogador que foram <strong>de</strong>struídos.<br />
Entrada<br />
A primeira linha da entrada contém números dois inteiros N e M (1 ≤ N ≤ 100 e M<br />
≤ 100) representando respectivamente o número <strong>de</strong> linhas e <strong>de</strong> colunas do<br />
tabuleiro. As N seguintes linhas correspon<strong>de</strong>m ao tabuleiro do jogo. Cada uma<br />
<strong>de</strong>ssas linhas contém M caracteres. Cada caractere indica o conteúdo da<br />
1
posição correspon<strong>de</strong>nte no tabuleiro. Se esse caractere for '.', essa posição<br />
contém água; se for '#', essa posição contém uma parte <strong>de</strong> um navio. A próxima<br />
linha contém um número K que é o número <strong>de</strong> disparos feitos pelo jogador (1 ≤<br />
K ≤ N × M). As próximas K linhas indicam os disparos feitos pelo jogador. Cada<br />
linha contém dois inteiros L e C, indicando a linha e a coluna do disparo feito<br />
pelo outro jogador (1 ≤ L ≤ N e 1 ≤ C ≤ M).<br />
Saída<br />
Seu programa <strong>de</strong>ve imprimir uma única linha contendo um único número<br />
inteiro, o número <strong>de</strong> navios <strong>de</strong>struídos.<br />
Exemplos<br />
Entrada Saída<br />
5 5 4<br />
..#.#<br />
#....<br />
...#.<br />
#....<br />
...#.<br />
5<br />
1 3<br />
1 4<br />
1 5<br />
2 1<br />
3 4<br />
Entrada Saída<br />
5 5 2<br />
..###<br />
.....<br />
#####<br />
.....<br />
#.##.<br />
5<br />
5 1<br />
5 2<br />
1 3<br />
1 4<br />
1 5<br />
Entrada Saída<br />
2
7 7 1<br />
.#....#<br />
###..##<br />
.#....#<br />
....#.#<br />
.#..#.#<br />
.####.#<br />
.......<br />
8<br />
1 1<br />
1 2<br />
2 1<br />
2 2<br />
2 3<br />
3 2<br />
5 2<br />
6 2<br />
3
<strong>II</strong> <strong>Maratona</strong> <strong>de</strong> <strong>Programação</strong> <strong>FLF</strong> - <strong>2013</strong><br />
Questões <strong>de</strong> Preparação<br />
Questão 5: COMETA (Fonte: Olimpíada Brasileira <strong>de</strong> Informática 2010)<br />
O cometa Halley é um dos cometas <strong>de</strong> menor período do Sistema Solar,<br />
completando uma volta em torno do Sol a cada 76 anos; na última ocasião em<br />
que ele tornou-se visível do planeta Terra, em 1986, várias agências espaciais<br />
enviaram sondas para coletar amostras <strong>de</strong> sua cauda e assim confirmar teorias<br />
sobre suas composições químicas.<br />
Tarefa<br />
Escreva um programa que, dado o ano atual, <strong>de</strong>termina qual o próximo ano em<br />
que o cometa Halley será visível novamente do planeta Terra. Se o ano atual é<br />
um ano <strong>de</strong> passagem do cometa, consi<strong>de</strong>re que o cometa já passou nesse ano<br />
(ou seja, consi<strong>de</strong>re sempre o próximo ano <strong>de</strong> passagem, não consi<strong>de</strong>rando o<br />
ano atual).<br />
Entrada<br />
A única linha da entrada contém um único inteiro A (2010 ≤ A ≤ 10 4 ), indicando<br />
o ano atual.<br />
Saída<br />
Seu programa <strong>de</strong>ve imprimir uma única linha, contendo um número inteiro,<br />
indicando o próximo ano em que o cometa Halley será visível novamente do<br />
planeta Terra.<br />
Exemplos<br />
Entrada Saída<br />
2010 2062<br />
Entrada Saída<br />
10000 10042<br />
4
<strong>II</strong> <strong>Maratona</strong> <strong>de</strong> <strong>Programação</strong> <strong>FLF</strong> - <strong>2013</strong><br />
Questões <strong>de</strong> Preparação<br />
Questão 6: O FUGITIVO(Fonte: Olimpíada Brasileira <strong>de</strong> Informática 2009)<br />
Demasi é um terrorista e mafioso italiano que tentou escapar vindo para o Brasil.<br />
Mas Demasi não contava com a astúcia <strong>de</strong> nossa polícia, e acabou sendo preso<br />
aqui também.<br />
Por ser mafioso, Demasi conseguiu contratar advogados muito bons, que através<br />
<strong>de</strong> muitos recursos na justiça, acabaram conseguindo uma liberda<strong>de</strong><br />
condicional para ele.<br />
Nessa liberda<strong>de</strong> condicional, Demasi <strong>de</strong>ve permanecer a uma certa distância<br />
da <strong>de</strong>legacia <strong>de</strong> polícia responsável por ele. Para monitorá-lo melhor, eles<br />
instalaram nele uma coleira eletrônica inquebrável que, minuto a minuto, envia<br />
para uma central as movimentações <strong>de</strong> Demasi naquele momento.<br />
A informação da coleira é enviada indicando uma direção e uma distância. Por<br />
exemplo, em quatro minutos chegam as quatro linhas <strong>de</strong> informação abaixo:<br />
N 30<br />
O 44<br />
S 22<br />
L 10<br />
Isso significa que no primeiro minuto Demasi se <strong>de</strong>slocou 30 metros para o norte<br />
(letra N), no minuto seguinte andou 44 metros para o oeste (letra O), no outro<br />
minuto andou 22 metros para o sul (letra S) e no quarto minuto se <strong>de</strong>slocou 10<br />
metros para o leste (letra L). Para po<strong>de</strong>r dar um castigo ao terrorista, o juiz <strong>de</strong>cidiu<br />
que Demasi só po<strong>de</strong>ria andar nas quatro direções citadas acima. Ou seja,<br />
Demasi nunca se movimenta na direção noroeste, por exemplo. Neste<br />
problema, você po<strong>de</strong> supor que todos os movimentos <strong>de</strong> Demasi ocorrem sobre<br />
um plano cartesiano.<br />
5
A polícia precisa estar sempre atenta à movimentação <strong>de</strong>le, e pe<strong>de</strong> a sua ajuda<br />
para verificar se em algum momento o italiano se <strong>de</strong>sloca a uma distância da<br />
<strong>de</strong>legacia maior do que a permitida. A distância consi<strong>de</strong>rada para esta medida<br />
é a distância euclidiana.<br />
Tarefa<br />
Sua missão é criar um programa que receba as informações da coleira <strong>de</strong><br />
Demasi e diga se em algum momento Demasi esteve a uma distância maior do<br />
que a permitida.<br />
Você <strong>de</strong>ve assumir que no instante 0 (zero) Demasi está <strong>de</strong>ntro da <strong>de</strong>legacia (ou<br />
seja, a uma distância zero).<br />
Entrada<br />
A entrada contém um único conjunto <strong>de</strong> testes, que <strong>de</strong>ve ser lido do dispositivo<br />
<strong>de</strong> entrada padrão (normalmente o teclado).<br />
A primeira linha da entrada contém dois inteiros N e M (2 ≤ N ≤ 500.000, 1 ≤ M ≤<br />
1.000.000) representando o número <strong>de</strong> registros enviados pela coleira <strong>de</strong> Demasi<br />
e a distância máxima que ele po<strong>de</strong> ficar da <strong>de</strong>legacia, respectivamente. As N<br />
linhas seguintes contêm os registros da coleira, em or<strong>de</strong>m <strong>de</strong> envio. Cada linha<br />
contém um caractere C ('N', 'S', 'L' ou 'O', como especificados acima) e um inteiro<br />
D (1 ≤ D ≤ 1.000) representando a distância percorrida no minuto.<br />
Saída<br />
Seu programa <strong>de</strong>ve imprimir, na saída padrão, o valor 1 se em algum momento<br />
Demasi se afastou da <strong>de</strong>legacia além da distância permitida, ou o valor 0 caso<br />
contrário.<br />
Exemplos<br />
Entrada Saída<br />
5 10 0<br />
N 2<br />
6
L 3<br />
S 4<br />
O 4<br />
O 3<br />
Entrada Saída<br />
5 10 1<br />
N 6<br />
L 8<br />
S 15<br />
O 5<br />
O 4<br />
Construa as soluções para estes três problemas! Isto<br />
certamente o ajudará a ter uma ótima preparação para a <strong>II</strong><br />
<strong>Maratona</strong> <strong>de</strong> <strong>Programação</strong> <strong>FLF</strong>.<br />
Boa sorte!<br />
7