11.09.2013 Views

1 II Maratona de Programação FLF - 2013

1 II Maratona de Programação FLF - 2013

1 II Maratona de Programação FLF - 2013

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!