Download as pdf or txt
Download as pdf or txt
You are on page 1of 218

Archives of the SPOJ Brasil

obi problemset

Editors:
Wanderley Guimares
Last updated: 2012-12-14 09:16:56

Preface
This electronic material contains a set of algorithmic problems, forming the archives of the SPOJ Brasil (http://www.spoj.com/SPOJBR/), obi problemset. The document can be accessed at the following URLs: in PostScript format: http://www.spoj.com/SPOJBR/problems/obi.ps in Portable Document Format: http://www.spoj.com/SPOJBR/problems/obi.pdf These resources are constantly updated to synchronise with the ever-changing hypertext version of the problems, and to include newly added problems. If you have obtained this document from another source, it is strongly recommended that you should download the current version from one of the aforementioned URLs. Enjoy problem-solving at the SPOJ Brasil!
Disclaimer from the Editors. Despite our best efforts, it is possible that this document contains errors or that some of the content differs slightly from its original hypertext form. We take no responsibility for any such faults and their consequences. We neither authorise nor approve use of this material for any purpose other than facilitating problem solving at the Sphere Online Judge site; nor do we guarantee its fitness for any purpose whatsoever. The layout of the problems in this document is the copyright of the Editors named on the cover (as determined by the appropriate footers in the problem description). The content is the copyright of the respective Editor unless the copyright holder is otherwise stated in the resource section. The document as a whole is not protected by copyright, and fragments of it are to be regarded independently. No responsibility is taken by the Editors if use or redistribution of this document violates either their or third party copyright laws. When referring to or citing the whole or a fragment of this document, please state clearly the aforementioned URLs at which the document is to be found, as well as the resources from which the problems you are referring to originally came. Remarks concerning this document should be sent to the following e-mail address: contact@spoj.com.

Table of Contents
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Problem REDOTICA (810. Rede tica) Problem QUERM (811. Quermesse) Problem BIT (812. Bits Trocados) Problem SALDO (813. Saldo de gols) Problem MACACO (814. Macaco-prego) Problem LUA (815. Temperatura Lunar) Problem TESOURO (816. Caa ao Tesouro) Problem DOBRA (817. Dobradura) Problem AERO (818. Aeroporto) Problem PEDAGIO (819. Pedgio) Problem COFRE (840. Cofrinhos da V Vitria) Problem ESTAGIO (841. Estgio) Problem OBIHANOI (842. Torres de Hani) Problem SUPERMER (843. Supermercado) Problem NUMERDOS (844. Nmero de Erdos) Problem OBITETRI (845. Tetris) Problem METEORO (1330. Meteoros) Problem OBIDOMIN (1331. Domin) Problem DENGUE (1332. Dengue) Problem SORVETE (1333. Sorvete) Problem CALCULA (1334. Calculando) Problem PAR (1363. Par ou mpar) Problem FUROS (1364. Cubra os furos) Problem PAL (1365. Palndrome) Problem TV (1366. TV da Vov) Problem SENHA (1367. Proteja sua senha) Problem ORKUT (1368. Orkut) Problem BAFO (1386. Bafo) Problem ENERGIA (1387. Transmissao de Energia) Problem VIVO (1388. Vivo ou Morto) Problem DESCULPA (1389. Pedido de Desculpas) Problem OBIPOKER (1390. Mini-Poker) Problem FROTATAX (2606. Frota de Txi) Problem MINHOCA (2607. Campo de Minhocas) Problem DUENDE (2608. Duende Perdido) Problem TRILHAS (2609. Trilhas) Problem ELEICOES (3773. Eleioes) Problem FATORIA2 (3774. Fatorial) Problem FLIPERAM (3775. Fliperama) Problem GENEAL (3776. rvore Genealgica) Problem MIOJO (3826. Miojo) Problem PARPROX (3827. Pontos) Problem PRIMO (3828. Primo) Problem QUADRAD2 (3829. Quadrados) Problem SOMA (3830. Soma)

46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92.

Problem JSEDEX (8696. Sedex) Problem JPNEU (8697. Pneu) Problem JGARCOM (8698. Garom) Problem JDENTIST (8699. Dentista) Problem JESCADA (8700. Escada) Problem JTACOGRA (8701. Tacgrafo) Problem CONTA1 (8703. Conta de gua) Problem COPA1 (8704. Copa do mundo) Problem PEDAGIO1 (8705. Pedgio) Problem TIMES1 (8706. Times) Problem CHAMADA1 (8707. Chamada) Problem DANCA1 (8708. Dana) Problem FUSOES1 (8709. Fusoes) Problem MARCIAN1 (8710. Marciano) Problem BATALHA2 (8776. Batalha naval) Problem COMETA2 (8777. Cometa) Problem ELEVADO2 (8778. Elevador) Problem REUNIAO2 (8779. Reuniao) Problem ALTAS2 (8780. Altas aventuras) Problem FLOREST2 (8781. Floresta) Problem MATRIZ2 (8782. Matrizes) Problem TELESCO2 (8783. Telescpio) Problem TRADUTO2 (8784. Tradutor aliengena) Problem MINADO12 (10864. Campo minado) Problem CORRID11 (10865. Corrida) Problem TRANSP11 (10866. Transporte) Problem CALCUL11 (10867. Calculadora) Problem CHUVA11 (10868. Chuva) Problem GINCAN11 (10869. Gincana) Problem CORR11 (11001. Corrida) Problem PAS11 (11002. Progressoes aritmticas) Problem PUSAPO11 (11003. Pulo do sapo) Problem TRIANG11 (11004. Tringulos) Problem CALCU11 (11005. Calculadora) Problem COLOR11 (11006. Colorindo) Problem BALE11 (11007. Bal) Problem SELOS11 (11008. Selos) Problem PESCA11 (11009. O mar nao est para peixe) Problem TESOUR11 (11010. Caa ao tesouro) Problem CARTOG11 (11011. Desafio cartogrfico) Problem QUADRA11 (11012. Quadrado aritmtico) Problem MAGICO11 (11013. Quadrado mgico) Problem EXPRES11 (11014. Expressoes) Problem ESCALO11 (11015. Escalonamento timo) Problem RMAPA11 (11016. Reduzindo detalhes em um mapa) Problem VIRA11 (11017. Vira!) Problem BACT09 (11628. Bactrias)

93. Problem CHOCPJ09 (11629. Competio de chocolate) 94. Problem CHOC09 (11630. Competio de chocolate) 95. Problem ENVEL09 (11631. Nmero de Envelopes) 96. Problem FUGIT09 (11636. O fugitivo) 97. Problem MARAT09 (11638. Maratona) 98. Problem MITO09 (11641. Caadores de Mitos) 99. Problem NOTA09 (11645. Notas da prova) 100. Problem OLIMP09 (11646. Olimpadas) 101. Problem OVERF09 (11647. Overflow) 102. Problem PAPEL09 (11648. Avioes de papel) 103. Problem PONTES09 (11649. Caminho das pontes) 104. Problem SIMUL09 (11650. Simulador) 105. Problem BANDA09 (11651. Banda) 106. Problem CADEIR09 (11654. Cadeiras do auditrio) 107. Problem OLIMPJ09 (11675. Olimpadas) 108. Problem LAB07 (12928. Labirinto) 109. Problem PIZZA07 (12930. Pizza) 110. Problem PENAL06 (12937. Penalidade mnima) 111. Problem PAO07 (12939. Po a metro) 112. Problem AUTO08 (12993. Auto Estrada) 113. Problem VIAESP08 (12994. Viagem Espacial) 114. Problem CAVALO08 (12995. Cavalos) 115. Problem CHUVA08 (12997. Chuva) 116. Problem ORTOG08 (12998. Ortografia) 117. Problem FRETE08 (12999. Frete da Famlia Silva)

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

810. Rede tica


Problem code: REDOTICA
Os caciques da regiao de Tutuau pretendem integrar suas tribos a chamada "aldeia global". A primeira providencia foi a distribuiao de telefones celulares a todos os pajs. Agora, planejam montar uma rede de fibra tica interligando todas as tabas. Esta empreitada requer que sejam abertas novas picadas na mata, passando por reservas de flora e fauna. Conscientes da necessidade de preservar o mximo possvel o meio ambiente, os caciques encomendaram um estudo do impacto ambiental do projeto. Ser que voce consegue ajud-los a projetar a rede de fibra tica?

Tarefa
Vamos denominar uma ligaao de fibra tica entre duas tabas de um ramo de rede. Para possibilitar a comunicaao entre todas as tabas necessrio que todas elas estejam interligadas, direta (utilizando um ramo de rede) ou indiretamente (utilizando mais de um ramo). Os caciques conseguiram a informaao do impacto ambiental que causar a construao dos ramos. Alguns ramos, no entanto, nem foram considerados no estudo ambiental, pois sua construao impossvel.

Sua tarefa escrever um programa para determinar quais ramos devem ser construdos, de forma a possibilitar a comunicaao entre todas as tabas, causando o menor impacto ambiental possvel.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm dois nmeros inteiros positivos N e M que indicam, respectivamente, o nmero de tabas e o nmero de ramos de redes possveis. As tabas sao numeradas de 1 a N. As M linhas seguintes contem tres inteiros positivos X, Y e Z, que indicam que o ramo de rede que liga a taba X a taba Y tem impacto ambiental

Z. Com os conjuntos de teste dados sempre possvel interligar todas as tabas. O final da entrada indicado quando N = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir uma lista dos ramos de redes que devem ser construdos. A lista deve ser precedida de uma linha que identifica o conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A lista composta por uma sequencia de ramos a serem construdos, um ramo por linha. Um ramo descrito por um par de tabas X e Y , com X < Y. Os ramos de rede podem ser listados em qualquer ordem, mas nao deve haver repetiao. Se houver mais de uma soluao possvel, imprima apenas uma delas. O final de uma lista de ramos deve ser marcado com uma linha em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 3 3 1 2 10 2 3 10 3 1 10 5 6 1 2 15 1 3 12 2 4 13 2 5 5 3 2 6 3 4 6 0 0 Sada: Teste 1 1 2 1 3 Teste 2 1 3 2 3 2 5 3 4

Restrioes
0 1 1 1 1 <= <= <= <= <= N M X Y Z <= <= <= <= <= 100 (N = 0 apenas para indicar o fim da entrada) N(N-1)/2 100 100 100

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2006-04-19 1s 50000B

Pyramid (Intel Pentium III 733 MHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: Olimpiada Brasileira de Informatica 2000

SPOJ Problem Set (obi)

811. Quermesse
Problem code: QUERM
Os alunos do ltimo ano resolveram organizar uma quermesse para arrecadar fundos para a festa de formatura. A festa prometia ser um sucesso, pois o pai de um dos formandos, Tefilo, dono de uma loja de informtica, decidiu doar um computador para ser sorteado entre os que comparecessem. Os alunos prepararam barracas de quentao, pipoca, doces, ensaiaram a quadrilha e colocaram a venda ingressos numerados sequencialmente a partir de 1. O nmero do ingresso serviria para o sorteio do computador. Ficou acertado que Tefilo decidiria o mtodo de sorteio; em princpio o sorteio seria, claro, computadorizado. O local escolhido para a festa foi o ginsio da escola. A entrada dos participantes foi pela porta principal, que possui uma roleta, onde passa uma pessoa por vez. Na entrada, um funcionrio inseriu, em uma lista no computador da escola, o nmero do ingresso, na ordem de chegada dos participantes. Depois da entrada de todos os participantes, Tefilo comeou a trabalhar no computador para preparar o sorteio. Verificando a lista de presentes, notou uma caracterstica notvel: havia apenas um caso, em toda a lista, em que o participante que possuia o ingresso numerado com i, havia sido a i-sima pessoa a entrar no ginsio. Tefilo ficou tao encantado com a coincidencia que decidiu que o sorteio nao seria necessrio: esta pessoa seria o ganhador do computador.

Tarefa
Conhecendo a lista de participantes, por ordem de chegada, sua tarefa determinar o nmero do ingresso premiado, sabendo que o ganhador o nico participante que tem o nmero do ingresso igual a sua posiao de entrada na festa.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um nmero inteiro positivo N que indica o nmero de participantes da festa. A linha seguinte contm a sequencia, em ordem de entrada, dos N ingressos das pessoas que participaram da festa. O final da entrada indicado quando N = 0. Para cada conjunto de teste da entrada haver um nico ganhador.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas. A primeira linha identifica o conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o nmero do ingresso do ganhador, conforme determinado pelo seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 4 4 5 3 1 10 9 8 7 6 1 4 3 2 12 10 0 Sada: Teste 1 3 Teste 2 10

Restrioes
0 <= N <= 10000 (N = 0 apenas para indicar o fim da entrada) Added by: Wanderley Guimaraes Date: 2006-04-19 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2000

SPOJ Problem Set (obi)

812. Bits Trocados


Problem code: BIT
As Ilhas Weblands formam um reino independente nos mares do Pacfico. Como um reino recente, a sociedade muito influenciada pela informtica. A moeda oficial o Bit; existem notas de B$ 50,00, B$10,00, B$5,00 e B$1,00. Voce foi contratado(a) para ajudar na programaao dos caixas automticos de um grande banco das Ilhas Weblands.

Tarefa
Os caixas eletrnicos das Ilhas Weblands operam com todos os tipos de notas disponveis, mantendo um estoque de cdulas para cada valor (B$ 50,00, B$10,00, B$5,00 e B$1,00). Os clientes do banco utilizam os caixas eletrnicos para efetuar retiradas de um certo nmero inteiro de Bits. Sua tarefa escrever um programa que, dado o valor de Bits desejado pelo cliente, determine o nmero de cada uma das notas necessrio para totalizar esse valor, de modo a minimizar a quantidade de cdulas entregues. Por exemplo, se o cliente deseja retirar B$50,00, basta entregar uma nica nota de cinquenta Bits. Se o cliente deseja retirar B$72,00, necessrio entregar uma nota de B$50,00, duas de B$10,00 e duas de B$1,00.

Entrada
A entrada composta de vrios conjuntos de teste. Cada conjunto de teste composto por uma nica linha, que contm um nmero inteiro positivo V, que indica o valor solicitado pelo cliente. O final da entrada indicado por V = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. Na segunda linha devem aparecer quatro inteiros I, J, K e L que representam o resultado encontrado pelo seu programa: I indica o nmero de cdulas de B$50,00, J indica o nmero de cdulas de B$10,00, K indica o nmero de cdulas de B$5,00 e L indica o nmero de cdulas de B$1,00. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 1 72 0 Sada: Teste 1

0 0 0 1 Teste 2 1 2 0 2

Restrioes
0 <= V <= 10000 (V = 0 apenas para indicar o fim da entrada) Added by: Wanderley Guimaraes Date: 2006-04-19 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2000

SPOJ Problem Set (obi)

813. Saldo de gols


Problem code: SALDO
Hiplito um torcedor fantico. Coleciona flmulas, bandeiras, recortes de jornal, figurinhas de jogadores, camisetas e tudo o mais que se refira a seu time preferido. Quando ganhou um computador de presente em uma festa, resolveu montar um banco de dados com os resultados de todos os jogos de seu time ocorridos desde a sua fundaao, em 1911. Depois de inseridos os dados, Hiplito comeou a ficar curioso sobre estatsticas de desempenho do time. Por exemplo, ele deseja saber qual foi o perodo em que o seu time acumulou o maior saldo de gols. Como Hiplito tem o computador h muito pouco tempo, nao sabe programar muito bem, e precisa de sua ajuda.

Tarefa
dada uma lista, numerada seqencialmente a partir de 1, com os resultados de todos os jogos do time (primeira partida: 3 x 0, segunda partida: 1 x 2, terceira partida: 0 x 5 ...). Sua tarefa escrever um programa que determine em qual perodo o time conseguiu acumular o maior saldo de gols. Um perodo definido pelos nmeros de seqencia de duas partidas, A e B, onde A <= B. O saldo de gols acumulado entre A e B dado pela soma dos gols marcados pelo time em todas as partidas realizadas entre A e B (incluindo as mesmas) menos a soma dos gols marcados pelos times adversrios no perodo. Se houver mais de um perodo com o mesmo saldo de gols, escolha o maior perodo (ou seja, o perodo em que B - A maior). Se ainda assim houver mais de uma soluao possvel, escolha qualquer uma delas como resposta.

Entrada
Seu programa deve ler vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um inteiro nao negativo, N, que indica o nmero de partidas realizadas pelo time (o valor N = 0 indica o final da entrada). Seguem-se N linhas, cada uma contendo um par de nmeros inteiros nao negativos X e Y que representam o resultado da partida: X sao os gols a favor e Y os gols contra o time de Hiplito. As partidas sao numeradas sequencialmente a partir de 1, na ordem em que aparecem na entrada.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter um par de inteiros I e J que indicam respectivamente a primeira e ltima partidas do melhor perodo, conforme determinado pelo seu programa, exceto quando o saldo de gols do melhor perodo for menor ou igual a zero; neste caso a segunda linha deve conter a expressao "nenhum". A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 2 2 3 7 1 9 2 2 0 5 6 2 1 4 0 0 5 1 1 5 6 2 0 5 3 0 2 0 3 0 4 0 Sada: Teste 1 2 2 Teste 2 3 8 Teste 3 nenhum

Restrioes
0 <= N <= 10000 (N = 0 apenas para indicar o fim da entrada) > 1 <= A <= N <code> > A <= B <= N<code> > 0 <= X <= 50<code> > 0 <= Y <= 50<code> > Added by:<td>Wanderley Guimaraes Date: 2006-04-19 Time limit: 1s Source limit: 50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2000

SPOJ Problem Set (obi)

814. Macaco-prego
Problem code: MACACO
O macaco-prego um animal irrequieto e barulhento, merecedor tambm dos adjetivos desordeiro e despudorado. A sua cabea, encimada por uma densa pelagem negra ou marrom-escura, semelhante a um gorro, torna seu aspecto inconfundvel. Apesar de ser o macaco mais comum nas matas do pas, uma de suas sub-espcies encontra-se seriamente ameaada de extinao: o macacopregodo-peito-amarelo, que se distingue das demais pela coloraao amarelada do peito e da parte anterior dos braos. Um grande esforo foi feito pelos primatologistas para aumentar a populaao dos macacos-pregodopeito-amarelo. Sabe-se que eles se alimentam de plantas, das quais consomem preferencialmente frutos e brotos. Alimentam-se tambm de muitos animais, preferencialmente lesmas, lagartas e ras, e preferem as florestas mais densas. Para determinar o melhor local do pas para criar uma nova reserva ambiental para os macacos-prego-do-peito-amarelo, o governo fez um levantamento das regioes no pas onde as condioes preferidas desses animais ocorrem: regioes de floresta densa, regioes com frutos, regioes com muitos brotos, etc. Ajude a salvar os macacos-pregodo- peito-amarelo.

Tarefa
As regioes propcias para o macaco-prego-do-peito-amarelo foram determinadas como retngulos cujos lados sao todos verticais ou horizontais. Sua tarefa encontrar o local ideal para a reserva ambiental, definida como a interseao de todas as regioes dadas. [IMAGE] As regioes foram divididas de tal forma que uma regiao nao tangencia qualquer outra regiao. Assim, a interseao entre quaisquer duas regioes ou um retngulo ou vazia.

Entrada
Seu programa deve ler vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um inteiro nao negativo, N, que indica o nmero de regioes (o valor N = 0 indica o final da entrada). Seguem-se N linhas, cada uma contendo quatro nmeros inteiros X, Y, U e V que descrevem uma regiao: o par X, Y representa a coordenada do canto superior esquerdo e o par U, V representa a coordenada do canto inferior direito de um retngulo.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter as coordenadas do retngulo de interseao encontrado pelo seu programa, no mesmo formato utilizado na entrada. Caso a interseao seja vazia, a segunda linha deve conter a expressao "nenhum". A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 3 0 6 8 1 1 5 6 3 2 4 9 0 3 0 4 4 0 3 1 7 -3 6 4 10 0 0 Sada: Teste 1 2 4 6 3 Teste 2 nenhum

Restrioes
0 <= N -10000 -10000 -10000 -10000 <= <= <= <= <= 10000 (N = 0 apenas para indicar o fim da entrada) X <= 10000 Y <= 10000 U <= 10000 V <= 10000

Added by: Wanderley Guimaraes Date: 2006-04-20 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2000

SPOJ Problem Set (obi)

815. Temperatura Lunar


Problem code: LUA
Sem as proteoes da atmosfera e do cinturao magntico que existem na Terra, a Lua fica exposta ao ataque do Sol, que um astro em constante explosao atmica. As explosoes do Sol emitem ondas letais de partculas. Uma pessoa que ficasse desprotegida na superfcie da Lua, num lugar onde o Sol incidisse diretamente, sofreria um bombardeio radioativo tao intenso quanto se estivesse nas imediaoes da usina russa de Chernobyl no momento do acidente que matou 31 pessoas, em 1986. Alm da radiaao solar, outro efeito desta falta de proteao contra o Sol que existe na Lua a enorme variaao de temperatura. Nas regioes prximas do equador lunar, a variaao de temperatura brutal, passando de cerca de 130 graus positivos durante o dia a 129 graus negativos a noite. Para estudar com mais precisao as variaoes de temperatura na superfcie da Lua, a NASA enviou a Lua uma sonda com um sensor que mede a temperatura de 1 em 1 minuto. Um dado importante que os pesquisadores desejam descobrir como se comporta a mdia da temperatura, considerada em intervalos de uma dada duraao (uma hora, meia hora, oito horas, etc.). Por exemplo, para a seqencia de medioes 8, 20, 30, 50, 40, 20, -10, e intervalos de quatro minutos, as mdias sao respectivamente 108/4=27, 140/4=35, 140/4=35 e 100/4=25.

Tarefa
Voce foi recentemente contratado pela NASA, e sua primeira tarefa escrever um programa que, conhecidos a seqencia de temperaturas medidas pelo sensor, e o tamanho do intervalo desejado, informe qual a maior e qual a menor temperatura mdia observadas, considerando o tamanho do intervalo dado.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm dois nmeros inteiros positivos N e M, que indicam respectivamente o nmero total de medioes de temperatura de uma seqencia obtida pelo sensor, e o tamanho dos intervalos, em minutos, em que as mdias devem ser calculadas. As N linhas seguintes contem um nmero inteiro cada, representando a seqencia de medidas do sensor. O final da entrada indicado quando N = M = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas. A primeira linha identifica o conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter dois nmeros inteiros X e Y, separados por ao menos um espao em branco, representando respectivamente os valores da menor e da maior mdia de temperatura, conforme determinado pelo seu programa. O valor da mdia deve ser truncado, se a mdia nao for um nmero inteiro (ou seja, deve ser impressa apenas a parte inteira). A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 4 2 -5 -12 0 6 7 4 35 -35 5 100 100 50 50 0 0 Sada: Teste 1 -8 3 Teste 2 26 75

Restrioes
0 <= N <= 10000 (N = 0 apenas para indicar o fim da entrada) > -200 <= Temperatura <= 200 > 1 <= M <= N > Added by:<td>Wanderley Guimaraes Date: 2006-04-20 Time limit: 1s Source limit: 50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2002

SPOJ Problem Set (obi)

816. Caa ao Tesouro


Problem code: TESOURO
Quando limpavam o porao da casa recentemente herdada, os primos Joao e Jos descobriram um antigo mapa guardado no ba que havia sido de seu bisav. O mapa parecia descrever uma ilha, era muito antigo, e em meio a indicaoes de caminhos pela ilha, continha apenas um nome: Huyn Chong Chong. Curiosos, Joao e Jos pesquisaram o nome na bilbioteca do colgio e na Internet. Para sua surpresa e excitaao, o nome era relacionado a uma antiga lenda de um tesouro escondido por piratas no sculo XVIII. Encantados com a lenda, os primos acreditaram ter encontrado o mapa que os levaria ao tesouro, escondido na ilha de Huyn Chong Chong, prximo a Coria do Sul. O tesouro, dizia a lenda, continha uma arca cheia de pedras preciosas muito raras e valiosas. Certos de que encontrariam o tesouro, os primos embarcaram rumo a ilha. Cada um dos primos se imaginava mais esperto do que o outro, e acreditava que encontraria o tesouro primeiro. Assim, eles combinaram que cada um ficaria com a parte do tesouro que encontrasse. Os primos entao se separaram, e comearam a procurar o tesouro, especialmente a arca. Cada um dos primos tomou o caminho que imaginava que o levaria at a arca, e seguindo a indicaao do mapa, ambos foram encontrando vrias jias pelo caminho. Coincidentemente, os dois primos cheragam ao mesmo tempo no local onde a arca estava escondida. Como os dois encontraram a arca ao mesmo tempo, eles tinham agora que decidir como dividir o tesouro. Depois de analisar algumas alternativas, os primos concordaram em fazer a divisao da seguinte forma. Cada um ficaria com a parte do tesouro que encontrou antes de chegar a arca, e o contedo da arca seria dividido de forma que os dois ficassem com partes do tesouro total de mesmo valor. Para fazer a divisao desta forma, ao chegar de volta ao Brasil, os primos mandaram avaliar cada jia do tesouro. Contudo, eles estao agora em dvida se possvel fazer a divisao conforme eles haviam combinado. Voce, como amigo dos dois primos (agora milionrios), e esperando receber alguma recompensa, disps-se a ajud-los a descobrir se possvel fazer tal divisao.

Tarefa
Sao dados: o valor dos objetos coletados por Joao e por Jos antes de encontrarem a arca; uma lista de valores, correspondentes aos objetos encontrados dentro da arca. Como as jias sao muito valiosas, estes valores sao dados em unidades de R$ 1.000,00, ou seja, o valor 10 significa R$ 10.000,00. Voce deve escrever um programa que determina se possvel dividir os objetos da arca de forma que, considerados tambm os valores dos objetos encontrados anteriormente (que ficarao com quem os encontrou), os primos recebam partes do tesouro com o mesmo valor.

Entrada
Seu programa deve ler vrios conjuntos de testes. A primeira linha de um conjunto de testes contm tres nmeros inteiros X, Y e N. Os valores X eY representam respectivamente a soma dos valores encontrados por Joao e por Jos antes de chegarem a arca. O valor N indica o nmero de objetos encontrados na arca. Seguem-se N linhas, cada uma contendo um nmero inteiro V, correspondendo ao valor de um dos objetos da arca. O final da entrada indicado por X = Y = N = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o caractere S caso seja possvel dividir o tesouro como combinado pelos dois primos, ou o caractere N caso contrrio. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 10 20 4 3 8 7 2 1 1 6 2 7 7 12 5 3 0 0 0 Sada: Teste 1 S Teste 2 N

Restrioes
0 <= X <= 50 (X = 0 apenas para indicar o final da entrada) 0 <= Y <= 50 (Y = 0 apenas para indicar o final da entrada) 0 <= N <= 100 (N = 0 apenas para indicar o final da entrada) 1 <= V <= 100 Added by: Wanderley Guimaraes Date: 2006-04-20 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2002

SPOJ Problem Set (obi)

817. Dobradura
Problem code: DOBRA
Tarefa
Zezinho tem aulas de Iniciaao Artstica em sua escola, e recentemente aprendeu a fazer dobraduras em papel. Ele ficou fascinado com as inmeras possibilidades de se dobrar uma simples folha de papel. Como Zezinho gosta muito de matemtica, resolveu inventar um quebra-cabea envolvendo dobraduras. Zezinho definiu uma operaao de dobradura D que consiste em dobrar duas vezes uma folha de papel quadrada de forma a conseguir um quadrado com 1/4 do tamanho original, conforme ilustrado na figura. [IMAGE] Depois de repetir N vezes esta operaao de dobradura D sobre o papel, Zezinho cortou o quadrado resultante com um corte vertical e um corte horizontal, conforme a figura abaixo. [IMAGE] Zezinho lanou entao um desafio aos seus colegas: quem adivinha quantos pedaos de papel foram produzidos?

Entrada
A entrada composta de vrios conjuntos de teste. Cada conjunto de teste composto de uma nica linha, contendo um nmero inteiro N que indica o nmero de vezes que a operaao de dobradura D foi aplicada. O final da entrada indicado por N = -1.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o nmero de pedaos de papel obtidos depois de cortar a dobradura, calculado pelo seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 1 0 -1 Sada: Teste 1

9 Teste 2 4

Restrioes
-1 <= N <= 15 (N = -1 apenas para indicar o fim da entrada) Added by: Wanderley Guimaraes Date: 2006-04-21 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2002

SPOJ Problem Set (obi)

818. Aeroporto
Problem code: AERO
A crescente utilizaao do transporte areo preocupa os especialistas, que preveem que o congestionamento em aeroportos poder se tornar um grande problema no futuro. Os nmeros atuais j sao alarmantes: relatrios oficiais demonstram que na Europa, em junho de 2001, houve uma mdia de 7.000 atrasos de vos por dia. Preocupada com a previsao dos seus especialistas em trfego areo, a Associaao de Transporte Areo Internacional (ATAI) est comeando um estudo para descobrir quais sao os aeroportos onde o trfego areo pode vir a ser mais problemtico no futuro.

Tarefa
Como programador recm contratado pela ATAI voce foi encarregado de escrever um programa para determinar, a partir de uma listagem de aeroportos e vos, qual aeroporto possui maior probabilidade de congestionamento no futuro. Como medida da probabilidade de congestionamento ser utilizado neste estudo o nmero total de vos que chegam ou que partem de cada aeroporto.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm dois nmeros inteiros A e V, que indicam respectivamente o nmero de aeroportos e o nmero de vos. Os aeroportos sao identificados por inteiros de 1 a A. As V linhas seguintes contem cada uma a informaao de um vo, representada por um par de nmeros inteiros positivos X e Y, indicando que h um vo do aeroporto X para o aeroporto Y. O final da entrada indicado quando A = V = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas. A primeira linha identifica o conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o identificador do aeroporto que possui maior trfego areo. Caso mais de um aeroporto possua este valor mximo, voce deve listar todos estes aeroportos, em ordem crescente de identificaao, e separados por pelo menos um espao em branco. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 5 7 1 3 2 1 3 2 3 4 4 5 3 5 2 5 3 5 1 3

1 3 1 2 0

2 2 2 1 0

Output: Teste 1 3 Teste 2 1 2

Restrioes
0 <= A <= 100 (A = 0 apenas para indicar o fim da entrada) 0 <= V <= 10000 (V = 0 apenas para indicar o fim da entrada) 1 <= X <= A 1 <= Y <= A X != Y Added by: Wanderley Guimaraes Date: 2006-04-21 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2002

SPOJ Problem Set (obi)

819. Pedgio
Problem code: PEDAGIO
Como premio pela primeira colocaao na Olimpada Brasileira de Informtica, Juquinha e sua famlia ganharam uma viagem de uma semana a Coria do Sul. Como o pas deslumbrante, com tradioes, cultura, arquitetura e culinria muito diferentes das do Brasil, o pai de Juquinha, o Sr. Juca, decidiu alugar um carro para conhecer melhor o pas. As estradas sao muito bem cuidadas; todas sao de sentido duplo, e duas cidades podem ser ligadas diretamente por mais de uma estrada. No entanto, em todas as estradas paga-se um pedgio de valor fixo (h um pedgio em cada direao, entre duas cidades). Como o Sr. Juca nao tem muito dinheiro para gastar, as viagens com o carro devem ser muito bem planejadas.

Tarefa
Escreva um programa que, conhecidas as cidades e estradas existentes no pas, e a cidade onde Juquinha e sua famlia estao, encontre cada cidade (que nao a cidade onde eles estao) que possa ser visitada por eles, dada a restriao de que o Sr. Juca deseja pagar no mximo P pedgios (considerando apenas a viagem de ida).

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm quatro nmeros inteiros C, E, L e P. Os valores C e E indicam respectivamente o nmero de cidades e o nmero de estradas existentes. As cidades sao identificadas por inteiros de 1 a C. os valores L e P indicam, respectivamente, a cidade onde a famlia de Juquinha est no momento e o nmero mximo de pedgios que o Sr. Juca est disposto a pagar. As E linhas seguintes contem cada uma a informaao de uma estrada, representada por um par de nmeros inteiros positivos X e Y, indicando que h uma estrada (de sentido duplo) da cidade X para a cidade Y. O final da entrada indicado por C = E = L = P = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. Na segunda linha devem aparecer os identificadores das cidades que podem ser alcanadas, em ordem crescente, separados por pelo menos um espao em branco. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 5 4 2 1 1 2 2 3 3 4 4 5

9 2 1 2 3 9 3 4 4 7 5 4 3 0

12 1 2 1 5 1 2 3 4 8 7 6 6 5 7 0 0 0

Output: Teste 1 1 3 Teste 2 2 3 4 5 6

Restrioes
0 <= C <= 50 (C = 0 apenas para indicar o fim da entrada) 0 <= E <= 2500 (E = 0 apenas para indicar o fim da entrada) 0 <= L <= C (L = 0 apenas para indicar o fim da entrada) 0 <= P <= C (P = 0 apenas para indicar o fim da entrada) 1 <= X <= C 1 <= Y <= C Added by: Wanderley Guimaraes Date: 2006-04-21 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2002

SPOJ Problem Set (obi)

840. Cofrinhos da V Vitria


Problem code: COFRE
V Vitria mantm, desde o nascimento dos netos Joaozinho e Zezinho, um ritual que faz a alegria dos meninos. Ela guarda todas as moedas recebidas como troco em dois pequenos cofrinhos, um para cada neto. Quando um dos cofrinhos fica cheio, ela chama os dois netos para um alegre almoo, ao final do qual entrega aos garotos as moedas guardadas nos cofrinhos de cada um. Ela sempre foi muito zelosa quanto a distribuiao igualitria do troco arrecadado. Quando, por fora do valor das moedas, ela nao consegue depositar a mesma quantia nos dois cofrinhos, ela memoriza a diferena de forma a compens-la no prximo depsito.

Tarefa
V Vitria est ficando velha e tem medo que deslizes de memria a faam cometer injustias com os netos, deixando de compensar as diferenas entre os cofrinhos. Sua tarefa ajudar V Vitria, escrevendo um programa de computador que indique as diferenas entre os depsitos, de forma que ela nao tenha que preocupar-se em memoriz-las.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um nmero inteiro N, que indica o nmero de depsitos nos cofrinhos. As N linhas seguintes descrevem cada uma um depsito nos cofrinhos; o depsito indicado por dois valores inteiros J e Z, separados por um espao em branco, representando respectivamente os valores, em centavos, depositados nos cofres de Joaozinho e Zezinho. O final da entrada indicado por N = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir um conjunto de linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A seguir seu programa deve escrever uma linha para cada depsito do conjunto de testes. Cada linha deve conter um inteiro que representa a diferena (em centavos) entre o valor depositado nos cofrinhos do Joaozinho e do Zezinho. Deixe uma linha em branco ao final de cada conjunto de teste. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 3 20 25 10 5 10 10 4 0 5 12 0

0 20 17 1 0 Sada: Teste 1 -5 0 0 Teste 2 -5 7 -13 3

Restrioes
0 <= N <= 100 (N = 0 apenas para indicar o fim da entrada) 0 <= J <= 100 (valor de cada depsito no cofre de Joaozinho) 0 <= Z <= 100 (valor de cada depsito no cofre de Zezinho) Added by: Wanderley Guimaraes Date: 2006-05-05 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2003

SPOJ Problem Set (obi)

841. Estgio
Problem code: ESTAGIO
Voce conseguiu um estgio para trabalhar como programador na secretaria da sua escola. Como primeira tarefa, Dona Vilma, a coordenadora, solicitou que voce aprimore um programa que foi desenvolvido pelo estagirio anterior. Esse programa tem como entrada uma lista de nomes e de mdias finais dos alunos de uma turma, e determina o aluno com a maior mdia na turma. Dona Vilma pretende utilizar o programa para premiar o melhor aluno de cada turma da escola. O programa desenvolvido pelo estagirio anterior encontra-se no final (em C, C++ e Pascal). Como voce pode verificar, o programa na forma atual tem uma imperfeiao: no caso de haver alunos empatados com a melhor mdia na turma, ele imprime apenas o primeiro aluno que aparece na lista.

Tarefa
Dona Vilma deseja que voce altere o programa para que ele produza uma lista com todos os alunos da turma que obtiveram a maior mdia, e nao apenas um deles. Voce consegue ajud-la nesta tarefa?

Entrada
A entrada constituda de vrios conjuntos de teste, representando vrias turmas. A primeira linha de um conjunto de testes contm um nmero inteiro N (1 <= N <= 1000) que indica o total de alunos na turma. As N linhas seguintes contem, cada uma, um par de nmeros inteiros C (1 <= C <= 20000) e M (0 <= M <= 100), indicando respectivamente o cdigo e a mdia de um aluno. O final da entrada indicado por uma turma com N = 0.

Sada
Para cada turma da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Turma n", onde n numerado a partir de 1. A segunda linha deve conter os cdigos dos alunos que obtiveram a maior mdia da turma. Os cdigos dos alunos devem aparecer na mesma ordem da entrada, e cada um deve ser seguido de um espao em branco. A terceira linha deve ser deixada em branco. O formato mostrado no exemplo de sada abaixo deve ser seguido rigorosamente.

Exemplo
Entrada: 3 1 85 2 91 3 73 5 12300 81 12601 99 15023 76 10111 99

212 99 0 Sada: Turma 1 2 Turma 2 12601 10111 212

Restrioes
0 <= N <= 1000 (N = 0 apenas para indicar o fim da entrada) 1 <= C <= 20000 0 <= M <= 100 Cdigo em Pascal
program estagio; const MAX_ALUNOS = 1000; type registro_aluno = record codigo, media : integer; end; var alunos : array[1..MAX_ALUNOS] of registro_aluno; n, i, indice_melhor, turma : integer; begin readln(n); { le numero de alunos da primeira turma } turma := 1; while n > 0 do begin for i := 1 to n do { le dados dos alunos } readln(alunos[i].codigo, alunos[i].media); indice_melhor := 1; for i := 2 to n do { procura aluno de maior media } if alunos[i].media > alunos[indice_melhor].media then indice_melhor := i; { escreve resposta } writeln(Turma , turma); turma := turma + 1; writeln(alunos[indice_melhor].codigo); writeln; { le numero de alunos da proxima turma } readln(n); end; end.

Cdigo em C
#include <stdio.h> #define MAX_ALUNOS 1000 int main() { int i, indice_melhor, n; int turma=1; struct { int codigo, media; } alunos[MAX_ALUNOS]; /* le numero de alunos da primeira turma */

scanf("%d", &n); while (n > 0) { /* le dados dos alunos */ for (i = 0; i < n; i++) scanf("%d %d", &alunos[i].codigo, &alunos[i].media); /* procura aluno de maior media */ indice_melhor = 0; for (i = 1; i < n; i++) if (alunos[i].media > alunos[indice_melhor].media) indice_melhor = i; /* escreve resposta */ printf("Turma %d\n%d\n\n", turma++, alunos[indice_melhor].codigo); /* le numero de alunos da proxima turma */ scanf("%d", &n); } return 0; }

Cdigo em C++
#include <iostream> const int MAX_ALUNOS = 1000; int main() { int i, indice_melhor, n; int turma=1; struct { int codigo, media; } alunos[MAX_ALUNOS]; // le numero de alunos da primeira turma cin >> n; while (n > 0) { // le dados dos alunos for (i = 0; i < n; i++) cin >> alunos[i].codigo >> alunos[i].media; // procura aluno de maior media indice_melhor = 0; for (i = 1; i < n; i++) if (alunos[i].media > alunos[indice_melhor].media) indice_melhor = i; // escreve resposta cout << "Turma " << turma++ << "\n"; cout << alunos[indice_melhor].codigo << "\n\n"; // le numero de alunos da proxima turma cin >> n; } return 0; }

Added by: Wanderley Guimaraes Date: 2006-05-05 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2003

SPOJ Problem Set (obi)

842. Torres de Hani


Problem code: OBIHANOI
O quebra-cabeas Torres de Hanoi muito antigo e conhecido, sendo constitudo de um conjunto de N discos de tamanhos diferentes e tres pinos verticais, nos quais os discos podem ser encaixados. [IMAGE] Cada pino pode conter uma pilha com qualquer nmero de discos, desde que cada disco nao seja colocado acima de outro disco de menor tamanho. A configuraao inicial consiste de todos os discos no pino 1. O objetivo do quebra-cabeas mover todos os discos para um dos outros pinos, sempre obedecendo a restriao de nao colocar um disco sobre outro menor. Um algoritmo para resolver este problema o seguinte.
procedimento Hanoi(N, Orig, Dest, Temp) se N = 1 entao mover o menor disco do pino Orig para o pino Dest; senao Hanoi(N-1, Orig, Temp, Dest); mover o N-simo menor disco do pino Orig para o pino Dest; Hanoi(N-1, Temp, Dest, Orig); fim-se fim

Tarefa
Sua tarefa escrever um programa que determine quantos movimentos de trocar um disco de um pino para outro serao executados pelo algoritmo acima para resolver o quebra-cabea.

Entrada
A entrada possui vrios conjuntos de teste. Cada conjunto de teste composto por uma nica linha, que contm um nico nmero inteiro N (0 <= N <= 30), indicando o nmero de discos. O final da entrada indicado por N = 0.

Sada
Para cada conjunto de teste, o seu programa deve escrever tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A segunda linha deve conter o nmero de movimentos que sao executados pelo algoritmo dado para resolver o problema das Torres de Hani com N discos. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 1 2 0 Sada Teste 1 1 Teste 2 3

Restrioes
0 <= N <= 30 (N = 0 apenas para indicar o final da entrada) Added by: Wanderley Guimaraes Date: 2006-05-05 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2003

SPOJ Problem Set (obi)

843. Supermercado
Problem code: SUPERMER
A rede de supermercados BemBom, da cidade de Planalto, decidiu reformular o armazenamento de seus estoques. No sistema atual, cada uma das lojas da rede possui espao para armazenar um pequeno estoque, sendo freqentemente necessrio transportar mercadorias de uma loja para outra. Para racionalizar o transporte e aumentar a capacidade de estoque, a direao da rede Bem-Bom decidiu instalar um depsito central. De forma a diminuir os custos com transporte, ficou definido que o novo depsito deve ser localizado em um quarteirao que minimize a soma das distncias dele at todas as lojas da rede. Por ser uma cidade planejada, Planalto possui uma caracterstica muito peculiar. Todas as suas ruas sao orientadas na direao leste-oeste ou norte-sul, e todos os quarteiroes sao do mesmo tamanho. Veja uma parte do mapa de Planalto na figura abaixo. Os quarteiroes em Planalto sao identificados pelo nmero de quadras, em cada direao, que os separam da localizaao da prefeitura (0,0). Localizaoes a leste e a norte da prefeitura sao identificadas por coordenadas positivas, e localizaoes a oeste e a sul por coordenadas negativas. [IMAGE] Parte do mapa de Planalto

Tarefa
A sua tarefa , dadas as coordenadas dos quarteiroes onde estao localizados todos os supermercados da rede, determinar o quarteirao onde deve ser instalado o novo depsito. A localizaao deste depsito deve ser tal que a soma das distncias entre o depsito e as lojas, em nmero de quarteiroes em ambas as direoes, seja a menor possvel. A distncia entre dois quarteiroes dada pela distncia entre eles na direao leste-oeste mais a distncia na direao norte-sul. Por exemplo, a distncia entre os quarteiroes (2,-1) e (4, 3) 2 + 4 = 6.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de cada conjunto de teste contm um nmero inteiro S que o nmero de supermercados da rede. A seguir, sao dadas S linhas, cada uma contendo dois nmeros inteiros X e Y, representando as coordenadas do quarteirao onde se situa um dos supermercados. X representa a coordenada na direao leste-oeste e Y represetna a coordenada na direao norte-sul. O final da entrada dado por um conjunto de teste com S = 0.

Sada
Para cada conjunto de teste, o seu programa deve escrever tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A segunda linha deve conter as coordenadas X e Y do quarteirao onde deve ser instalado o novo depsito, separadas por um espao em branco. Se mais de um quarteirao

puder ser escolhido como localizaao do depsito, seu programa pode imprimir qualquer um deles. A terceira linha deve ser deixada em branco. O formato do exemplo de sada abaixo deve ser seguido rigorosamente.

Exemplo
Entrada: 4 1 2 -3 -3 4 -1 -5 0 5 1 3 7 13 25 13 15 14 25 1 0 Sada: Teste 1 -2 0 Teste 2 15 13

Restrioes
0 <= S <= 1000 (S = 0 apenas para indicar o final da entrada) -1000 <= X <= 1000 -1000 <= Y <= 1000 Added by: Wanderley Guimaraes Date: 2006-05-05 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2003

SPOJ Problem Set (obi)

844. Nmero de Erdos


Problem code: NUMERDOS
O matemtico hngaro Paul Erdos (1913-1996), um dos mais brilhantes do sculo XX, considerado o mais prolfico matemtico da histria. Erdos publicou mais de 1500 artigos, em colaboraao com cerca de outros 450 matemticos. Em homenagem a este genio hngaro, os matemticos criaram um nmero, denominado "nmero de Erdos". Toda pessoa que escreveu um artigo com Erdos tem o nmero 1. Todos que nao possuem nmero 1, mas escreveram algum artigo juntamente com algum que possui nmero 1, possuem nmero 2. E assim por diante. Quando nenhuma ligaao pode ser estabelecida entre Erdos e uma pessoa, diz-se que esta possui nmero de Erdos infinito. Por exemplo, o nmero de Erdos de Albert Einstein 2. E, talvez surpreendentemente, o nmero de Erdos de Bill Gates 4.

Tarefa
Sua tarefa escrever um programa que, a partir de uma lista de autores de artigos, determine o nmero de Erdos dos autores.

Entrada
A entrada constituda por vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um nmero inteiro A (1 <= A <= 100), que indica o nmero de artigos. Cada uma das A linhas seguintes contm a lista de autores de um artigo. Cada autor identificado pela inicial de seu nome (em maiscula), seguida de um ponto e de um espao em branco (indicando que o nome est abreviado), seguida de seu ltimo sobrenome (P. Erdos, por exemplo). O sobrenome de um autor possui, no mximo, 15 letras, e apenas a letra inicial aparece em maiscula. Os autores sao separados por vrgulas, e a lista de autores de um artigo termina com um ponto (veja os exemplos abaixo). Um nico espao em branco separa a abreviatura do nome do sobrenome, bem como o nome de um autor do anterior. Espaos em branco nao sao usados em outros locais. Um artigo possui, no mximo, 10 autores, e o total de autores nao excede 100. O final da entrada indicado por A = 0.

Sada
Para cada conjunto de teste da entrada seu programa deve produzir um conjunto de linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A seguir devem aparecer uma linha para cada autor do conjunto de testes (exceto o prprio P. Erdos). Cada linha deve conter o nome do autor seguido pelo caractere :, um espao em branco e o seu nmero de Erdos. Caso o nmero de Erdos de um determinado autor seja infinito, escreva infinito. A sada deve ser ordenada alfabeticamente pelo sobrenome do autor, e, em caso de mesmo sobrenome, o desempate deve ser feito pela inicial do primeiro nome. Imprima uma linha em branco ao final de cada conjunto de teste. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 5 P. Erdos, A. Selberg. P. Erdos, J. Silva, M. Souza. M. Souza, A. Selberg, A. Oliveira. J. Ninguem, M. Ninguem. P. Duarte, A. Oliveira. 2 Z. Silva, P. Erdos. Z. Souza. 0 Sada Teste 1 P. Duarte: 3 J. Ninguem: infinito M. Ninguem: infinito A. Oliveira: 2 A. Selberg: 1 J. Silva: 1 M. Souza: 1 Teste 2 Z. Silva: 1 Z. Souza: infinito

Restrioes
0 1 1 1 <= <= <= <= A <= 100 (nmero de artigos de um caso de teste; A = 0 apenas para indicar final da entrada) tamanho, em nmero de letras, do sobrenome de um autor <= 15 nmero de autores de um artigo <= 10 nmero total de autores em um conjunto de teste <= 100

Added by: Wanderley Guimaraes Date: 2006-05-05 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2003

SPOJ Problem Set (obi)

845. Tetris
Problem code: OBITETRI
A sua turma do colgio resolveu organizar um campeonato de tetris. Aps discussao sobre as regras, ficou definido que cada aluno jogaria um total de 12 partidas. Das 12 pontuaoes obtidas por um aluno, a maior e a menor sao descartadas, e as demais sao somadas, resultando na pontuaao final do aluno.

Tarefa
Como voce possui conhecimentos de programaao, acabou sendo designado pela turma para escrever um programa para imprimir a classificaao final do campeonato, a partir das pontuaoes de cada jogador.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de testes contm um nmero inteiro J, que indica o nmero de jogadores que participaram do campeonato. A seguir, para cada jogador h duas linhas na entrada: a primeira possui o nome do jogador (formado apenas por letras, sendo apenas a inicial em maiscula, e com no mximo 15 letras), e a segunda possui as 12 pontuaoes que o jogador obteve, separadas por espao. As pontuaoes sao inteiros entre 0 e 1000. O final da entrada indicado por um conjunto de teste com J = 0.

Sada
Para cada conjunto de teste, o seu programa deve escrever uma linha contendo o identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A seguir, o seu programa deve escrever a classificaao final no campeonato, utilizando uma linha para cada participante. Cada linha deve conter tres informaoes, separadas por um espao em branco: a classificaao do jogador, a sua pontuaao final, e o seu nome. A classificaao de um jogador igual a 1 mais o nmero de jogadores que obtiveram pontuaao maior do que a sua. Em caso de empate, os jogadores devem ser ordenados em ordem alfabtica. Depois de toda a classificaao, deve ser deixada uma linha em branco. O formato do exemplo de sada abaixo deve ser seguido rigorosamente.

Exemplo
Entrada: 4 Zezinho 100 123 133 333 400 300 129 200 360 340 200 600 Luizinho 60 50 120 250 170 190 190 220 260 270 290 300 Carlinhos 10 10 20 10 10 10 10 20 20 20 20 20 Joaozinho 200 300 400 400 500 500 500 600 650 650 700 810 3

Pedrinho 100 100 200 200 300 300 400 400 500 500 600 600 Huguinho 50 100 200 200 300 300 500 500 400 400 600 700 Zezinho 100 100 100 100 100 100 100 100 100 100 100 100 0 Sada: Teste 1 1 5200 Joaozinho 2 2518 Zezinho 3 2020 Luizinho 4 150 Carlinhos Teste 2 1 3500 Huguinho 1 3500 Pedrinho 3 1000 Zezinho

Restrioes
0 <= J <= 1000 (J = 0 apenas para indicar final da entrada) 0 <= pontuaao em uma partida <= 1000 1 <= tamanho dos nomes, em nmero de letras <= 15 Added by: Wanderley Guimaraes Date: 2006-05-05 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2003

SPOJ Problem Set (obi)

1330. Meteoros
Problem code: METEORO
Em noites sem nuvens pode-se muitas vezes observar pontos brilhantes no cu que se deslocam com grande velocidade, e em poucos segundos desaparecem de vista: sao as chamadas estrelas cadentes, ou meteoros. Meteoros sao na verdade partculas de poeira de pequenas dimensoes que, ao penetrar na atmosfera terrestre, queimam-se rapidamente (normalmente a uma altura entre 60 120 quilmetros). Se os meteoros sao suficientemente grandes, podem nao queimar-se completamente na atmosfera e dessa forma atingem a superfcie terrestre: nesse caso sao chamados de meteoritos. Z Felcio um fazendeiro que adora astronomia e descobriu um portal na Internet que fornece uma lista das posioes onde caram meteoritos. Com base nessa lista, e conhecendo a localizaao de sua fazenda, Z Felcio deseja saber quantos meteoritos caram dentro de sua propriedade. Ele precisa de sua ajuda para escrever um programa de computador que faa essa verificaao automaticamente.

Tarefa
Sao dados: uma lista de pontos no plano cartesiano, onde cada ponto corresponde a posiao onde caiu um meteorito; as coordenadas de um retngulo que delimita uma fazenda. As linhas que delimitam a fazenda sao paralelas aos eixos cartesianos. Sua tarefa escrever um programa que determine quantos meteoritos caram dentro da fazenda (incluindo meteoritos que caram exatamente sobre as linhas que delimitam a fazenda).

Entrada
Seu programa deve ler vrios conjuntos de testes. A primeira linha de um conjunto de testes quatro nmeros inteiros X1, Y1, X2 e Y2, onde (X1, Y1) a coordenada do canto superior esquerdo e (X2, Y2) a coordenada do canto inferior direito do retngulo que delimita a fazenda. A segunda linha contm um inteiro, N, que indica o nmero de meteoritos. Seguem-se N linhas, cada uma contendo dois nmeros inteiros X e Y, correspondendo as coordenadas de cada meteorito. O final da entrada indicado por X1 = Y1 = X2 = Y2 = 0.
Exemplo de entrada 2 4 5 1 2 1 2 3 3 2 4 3 2 3 1 1 2 2 3 3 0 0 0 0

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o nmero de meteoritos que caram dentro da fazenda. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.
Exemplo de sada Teste 1 1 Teste 2 2

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= N <= 10.000 > 0 <= X <= 10.000 > 0 <= Y <= 10.000 > 0 <= X1 < X2 <= 10.000 > 0 <= Y2 < Y1 <= 10.000 ><p> Added by: Wanderley Guimaraes Date: 2007-02-24 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2001

SPOJ Problem Set (obi)

1331. Domin
Problem code: OBIDOMIN
Todos conhecem o jogo de domins, em que peas com dois valores devem ser colocadas na mesa em seqencia, de tal forma que os valores de peas imediatamente vizinhas sejam iguais. O objetivo desta tarefa determinar se possvel colocar todas as peas de um conjunto dado em uma formaao vlida.

Tarefa
dado um conjuto de peas de domin. Cada pea tem dois valores X e Y, com X e Y variando de 0 a 6 (X pode ser igual a Y). Sua tarefa escrever um programa que determine se possvel organizar todas as peas recebidas em seqencia, obedecendo as regras do jogo de domin.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de testes contm um nmero inteiro N que indica a quantidade de peas do conjunto. As N linhas seguintes contem, cada uma, a descriao de uma pea. Uma pea descrita por dois inteiros X e Y (0 <= X <= 6 e 0 <= Y <= 6) que representam os valores de cada lado da pea. O final da entrada indicado por N = 0.
Exemplo de Entrada 3 0 1 2 1 2 1 2 1 1 0 0 6 3 0 0 0 1 6 4 1 0 6 2 3 0

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter a expressao "sim" se for possvel organizar todas as peas em uma formaao vlida ou a expressao "nao" (note a ausencia de acento) caso contrrio. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo de Sada Teste 1 sim Teste 2 nao Teste 3 sim

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= N <= 100 (N = 0 apenas para indicar o final da entrada) Added by: Wanderley Guimaraes Date: 2007-02-24 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2001

SPOJ Problem Set (obi)

1332. Dengue
Problem code: DENGUE
A Costa do Mosquito um pas pequeno mas paradisaco. Todos os habitantes tem boas moradias, bons empregos, o clima agradvel, e os governantes sao justos e incorruptveis. O sistema de transporte pblico da Costa do Mosquito composto de uma rede de linhas de trem. O sistema foi projetado de forma peculiar: existe um nico percurso ligando duas quaisquer vilas (esse percurso possivelmente passa por outras vilas). Por exemplo, na figura abaixo, que mostra um trecho do mapa da Costa do Mosquito, h apenas um percurso entre as vilas A e C, passando pelas vilas B, G e D. Uma tarifa fixa de M$ 1,00 cobrada por cada viagem entre vilas vizinhas; assim, para uma viagem de A a C o usurio gasta M$ 4,00. Devido a um inesperado surto de dengue, o Ministrio da Sade da Costa do Mosquito resolveu montar um Posto de Vacinaao. Para evitar que habitantes gastem muito dinheiro para se deslocar at a vila onde ficar o Posto de Vacinaao, o Ministrio da Sade decidiu que este dever ser instalado em uma vila de forma que o gasto com transporte at o Posto, para os habitantes que gastarem mais, seja o menor possvel (para o caso da figura abaixo a vila escolhida seria G).
E | | A --- B --- G --- D --- C | | F Figura: Trecho do mapa da Costa do Mosquito.

Tarefa
Sua tarefa escrever um programa que determine uma vila onde deve ser instalado o Posto de Vacinaao. Esta vila deve ser tal que o custo com transporte, para os habitantes que tiverem maior custo, seja o menor possvel. Note que devido a caracterstica peculiar do sistema virio, ou haver uma nica vila que satisfaz essa restriao, ou haver duas vilas que a satisfazem. No caso de existirem duas vilas apropriadas, qualquer uma delas serve como soluao.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de testes contm um nmero inteiro N que indica a quantidade de vilas do pas. As vilas sao numeradas de 1 a N. As N-1 linhas seguintes contem, cada uma, dois inteiros positivos X e Y que indicam que a vila X tem um caminho que a liga diretamente com a vila Y, sem passar por outras vilas. O final da entrada indicado por N = 0.

Exemplo de Entrada 2 1 2 7 1 2 2 5 7 4 7 2 4 6 3 4 1 0

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o nmero da vila na qual deve ser instalado o Posto de Vacinaao. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.
Exemplo de Sada Teste 1 1 Teste 2 7 Teste 3 1

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= N <= 100 (N = 0 apenas para indicar o final da entrada) Added by: Wanderley Guimaraes Date: 2007-02-24 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2001

SPOJ Problem Set (obi)

1333. Sorvete
Problem code: SORVETE
Joaozinho um menino que costuma ir a praia todos os finais de semana com seus pais. Eles freqentam sempre a mesma praia, mas cada semana o pai de Joaozinho estaciona o carro em um local diferente ao longo da praia, e instala sua famlia em um ponto na praia em frente ao carro. Joaozinho muito comilao, e adora de tomar sorvete na praia. Contudo, alguns dias acontece de nenhum sorveteiro passar pelo local onde eles estao. Intrigado com isto, e nao querendo mais ficar sem tomar seu sorvete semanal, Joaozinho foi at a Associaao dos Sorveteiros da Praia (ASP), onde ficou sabendo que cada sorveteiro passa o dia percorrendo uma mesma regiao da praia, indo e voltando. Alm disto, cada sorveteiro percorre todos os dias a mesma regiao. Joaozinho conseguiu ainda a informaao dos pontos de incio e fim da regiao percorrida por cada um dos sorveteiros. Com base nestes dados, Joaozinho quer descobrir os locais da praia onde o pai dele deve parar o carro, de forma que pelo menos um sorveteiro passe naquele local. S que o volume de dados muito grande, e Joaozinho est pensando se seria possvel utilizar o computador para ajud-lo nesta tarefa. No entanto Joaozinho nao sabe programar, e est pedindo a sua ajuda.

Tarefa
Voce deve escrever um programa que leia os dados obtidos pelo Joaozinho e imprima uma lista de intervalos da praia por onde passa pelo menos um sorveteiro.

Entrada
Seu programa deve ler vrios conjuntos de teste. A primeira linha de um conjunto de teste contm dois inteiros nao negativos, P e S, que indicam respectivamente o comprimento em metros da praia e o nmero de sorveteiros. Seguem-se S linhas, cada uma contendo dois nmeros inteiros U e V que descrevem o intervalo de trabalho de cada um dos sorveteiros, em metros contados a partir do incio da praia (U < V, 0 <= U <= P e 0 <= V <= P). O final da entrada indicado por S = 0 e P = 0.
Exemplo de Entrada 200 2 0 21 110 180 1000 3 10 400 80 200 400 1000 10 2 1 4 5 6 0 0

Sada
Para cada conjunto de teste da entrada seu programa deve produzir uma lista dos intervalos da praia que sao servidos por pelo menos um sorveteiro. A lista deve ser precedida de uma linha que identifica o conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. Cada intervalo da lista deve aparecer em uma linha separada, sendo descrito por dois nmeros inteiros U e V, representando respectivamente o incio e o final do intervalo (U <V). O final da lista de intervalos deve ser indicado por uma linha em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.
Exemplo de Sada Teste 1 0 21 110 180 Teste 2 10 1000 Teste 3 1 4 5 6

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= P <= 10000 (P = 0 apenas para indicar o final da entrada) > 0 <= S <= 5000 (S = 0 apenas para indicar o final da entrada) > 0 <= U <V <= P Added by: Wanderley Guimaraes Date: 2007-02-24 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2001

SPOJ Problem Set (obi)

1334. Calculando
Problem code: CALCULA
A disseminaao dos computadores se deve principalmente a capacidade de eles se comportarem como outras mquinas, vindo a substituir muitas destas. Esta flexibilidade possvel porque podemos alterar a funcionalidade de um computador, de modo que ele opere da forma que desejarmos: essa a base do que chamamos programaao.

Tarefa
Sua tarefa escrever um programa que faa com que o computador opere como uma calculadora simples. O seu programa deve ler expressoes aritmticas e produzir como sada o valor dessas expressoes, como uma calculadora faria. O programa deve implementar apenas um subconjunto reduzido das operaoes disponveis em uma calculadora: somas e subtraoes.

Entrada
A entrada composta de vrios conjuntos de testes. A primeira linha de um conjunto de testes contm um nmero inteiro m (1 <= m <= 100), indicando o nmero de operandos da expressao a ser avaliada. A segunda linha de um conjunto de testes contm a expressao aritmtica a ser avaliada, no seguinte formato: X 1 s 1 X 2 s 2 ... X m-1 s m-1 X m onde X i , 1 <= i <= m, um operando (0 <= X i <= 100); s j , 1 <= j <m, um operador, representado pelos smbolos + ou -; nao h espaos em branco entre operandos e operadores. O final da entrada indicado pelo valor m = 0.
Exemplo de Entrada 3 3+7-22 3 5-10-77 10 1+2+3+4+5+6+7+8+9+10 0

Sada
Para cada conjunto de testes da entrada seu programa deve produzir tres linhas. A primeira linha deve conter um identificador da expressao, no formato "Teste n", onde n numerado a partir de 1. Na segunda linha deve aparecer o resultado encontrado pelo seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo de Sada Teste 1 -12 Teste 2 -82 Teste 3 55

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
1 <= m <= 100 > 0 <= X i<sub> <= 100 para todo 1 <= i <= m Added by: Wanderley Guimaraes Date: 2007-02-24 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2001

SPOJ Problem Set (obi)

1363. Par ou mpar


Problem code: PAR
Muitas crianas gostam de decidir todas as disputas atravs do famoso jogo de Par ou mpar. Nesse jogo, um dos participantes escolhe Par e o outro mpar. Aps a escolha, os dois jogadores mostram, simultaneamente, uma certa quantidade de dedos de uma das maos. Se a soma dos dedos das maos dos dois jogadores for par, vence o jogador que escolheu Par inicialmente, caso contrrio vence o que escolheu mpar.

Tarefa
Dada uma seqencia de informaoes sobre partidas de Par ou mpar (nomes dos jogadores e nmeros que os jogadores escolheram), voce deve escrever um programa para indicar o vencedor de cada uma das partidas.

Entrada
A entrada composta de vrios conjuntos de testes. A primeira linha de um conjunto de testes contm um inteiro N, que indica o nmero de partidas de Par ou mpar que aconteceram. As duas linhas seguintes contem cada uma um nome de jogador. Um nome de jogador uma cadeia de no mnimo um e no mximo dez letras (maisculas e minsculas), sem espaos em branco. As N linhas seguintes contem cada uma dois inteiros A e B que representam o nmero de dedos que cada jogador mostrou em cada partida (0 <= A <= 5 e 0 <= B <= 5). Em todas as partidas, o primeiro jogador sempre escolhe Par. O final da entrada indicado por N = 0.
Exemplo de entrada 3 Pedro Paulo 2 4 3 5 1 0 2 Claudio Carlos 1 5 2 3 0

Sada
Para cada conjunto de teste da entrada, seu programa deve produzir a sada da seguinte forma. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. As prximas N linhas devem indicar o nome do vencedor de cada partida. A prxima linha deve ser deixada em branco. A grafia mostrada no Exemplo de 3 Sada, abaixo, deve ser seguida rigorosamente.

Exemplo de Sada Teste 1 Pedro Pedro Paulo Teste 2 Claudio Carlos

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= N <= 1000 (N = 0 apenas para indicar o fim da entrada) > 0 <= A <= 5<code> > 0 <= B <= 5<code> > 1 <= comprimento do nome de jogador <= 10<code> Added by: Wanderley Guimaraes Date: 2007-03-07 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2004

SPOJ Problem Set (obi)

1364. Cubra os furos


Problem code: FUROS
Uma placa de ao retangular contm N furos circulares de 5 mm de dimetro, localizados em pontos distintos, nao sobrepostos -- ou seja, o centro de cada furo est a uma distncia maior ou igual a 5 mm do centro de todos os outros furos. Uma pea de forma circular, tendo em seu centro um eixo de 5 mm de dimetro, deve ser colocada sobre a placa, de modo que o eixo encaixe-se em um de seus furos. [IMAGE] [IMAGE]

Tarefa
Voce deve escrever um programa para determinar o dimetro mnimo que a pea deve ter de tal forma que, com seu eixo encaixado em um dos furos da placa, a parte circular cubra completamente todos os outros furos da placa.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um inteiro N, que indica o nmero de furos na placa de ao (1 <= N <= 1000). As N linhas seguintes contem cada uma dois inteiros X e Y , separados por um espao em branco, que descrevem a posiao do centro de um furo (-10000 <= X <= 10000 e -10000 <= Y <= 10000). A unidade de medida das coordenadas dos furos 1 mm. O final da entrada indicado por N = 0.
Exemplo de Entrada 3 20 25 10 5 10 10 3 0 5 10 0 0 10 0

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A segunda linha deve conter o dimetro mnimo que a pea deve ter, como um nmero inteiro. A terceira linha em deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo de Sada Teste 1 42 Teste 2 28

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= N <= 1000 (N = 0 apenas para indicar o fim da entrada) > -10000 <= X <= 10000<code> > -10000 <= Y <= 10000<code> Added by: Wanderley Guimaraes Date: 2007-03-07 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2004

SPOJ Problem Set (obi)

1365. Palndrome
Problem code: PAL
Uma cadeia de caracteres chamada de palndrome se seqencia de caracteres da esquerda para a direita igual a seqencia de caracteres da direita para a esquerda (uma outra definiao que o primeiro caractere da cadeia deve ser igual ao ltimo caractere, o segundo caractere seja igual ao penltimo caractere, o terceiro caractere seja igual ao antepenltimo caractere, e assim por diante). Por exemplo, as cadeias de caracteres mim, axxa e ananaganana sao exemplos de palndromes. Se uma cadeia nao palndrome, ela pode ser dividida em cadeias menores que sao palndromes. Por exemplo, a cadeia aaxyx pode ser dividida de quatro maneiras distintas, todas elas contendo apenas cadeias palndromes: {aa, xyx}, {aa, x, y, x}, {a, a, xyx} e {a, a, x, y, x}.

Tarefa
Escreva um programa que determine qual o menor nmero de partes em que uma cadeia deve ser dividida de forma que todas as partes sejam palndromes.

Entrada
A entrada constituda de vrios conjuntos de teste. A primeira linha de um conjunto de testes contm um inteiro N que indica o nmero de caracteres da cadeia (1 <= N <= 2000). A segunda linha contm a cadeia de caracteres, composta por letras minsculas (de a a z), sem espaos em branco. O final da entrada indicado por N = 0.
Exemplo de Entrada 3 axa 6 xyzyyx 10 bbabcbbaab 0

Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter um inteiro indicando o menor nmero de partes que a cadeia de entrada deve ser dividida de forma que todas as partes sejam palndromes. A terceira linha deve ser deixada em branco. O formato mostrado no exemplo de sada abaixo deve ser seguido rigorosamente.

Exemplo de Sada Teste 1 1 Teste 2 4 Teste 3 4

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= N <= 2000 (N = 0 apenas para indicar o fim da entrada) Added by: Wanderley Guimaraes Date: 2007-03-07 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2004

SPOJ Problem Set (obi)

1366. TV da Vov
Problem code: TV
A vov tem um televisor muito antigo, que ultimamente est exibindo um defeito incmodo: a imagem aparece deslocada (para cima ou para baixo, para o lado direito ou para o lado esquerdo). Quando a imagem est deslocada para cima, a parte da imagem que deixa de ser vista na parte superior reaparece na parte de baixo da tela. Da mesma forma, quando a imagem est deslocada a direita, a parte da imagem que deixa de ser vista a direita reaparece na tela do lado esquerdo. [IMAGE] A imagem do televisor pode ser vista como uma matriz de pontos organizados em linhas e colunas. Para consertar o televisor da vov, voce pode ajustar a imagem introduzindo uma srie de comandos de correao em um painel de ajuste. Cada comando de correao desloca a imagem de um certo nmero de linhas (para cima ou para baixo) e um certo nmero de colunas (para a direita ou para a esquerda).

Tarefa
Dada uma matriz que representa uma imagem defeituosa e uma srie de comandos de correao, seu programa deve calcular a matriz que representa a imagem resultante aps todos os comandos terem sido aplicados sequencialmente.

Entrada
A entrada possui vrios conjuntos de teste. Cada conjunto de teste inicia com a descriao da matriz que representa a imagem do televisor. A primeira linha contm dois inteiros M e N representando o nmero de linhas e o nmero de colunas da matriz (1 <= M <= 1000 e 1 <= N <= 1000). As M linhas seguintes da entrada contm cada uma N inteiros, descrevendo o valor de cada ponto da imagem. Aps a descriao da imagem, segue-se a descriao dos comandos de correao. Cada comando de correao descrito em uma linha contendo dois inteiros X e Y. O valor de X representa o deslocamento na direao horizontal (valor positivo representa deslocamento para a direita, valor negativo para a esquerda), e o valor de Y representa o deslocamento da direao vertical (valor positivo para cima, valor negativo para baixo). O final da lista de comandos indicado por X = Y = 0, e o final da entrada indicado por M = N = 0.
Exemplo de Entrada 3 3 1 2 3 4 5 6 7 8 9 1 0 1 -1 0 0 3 4 6 7 8 5 10 11 12 9

2 3 4 1 -3 2 0 0 0 0

Sada
Para cada conjunto de teste, o seu programa deve produzir uma imagem na sada. A primeira linha da sada deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A seguir deve aparecer a matriz que representa a imagem resultante, no mesmo formato da imagem de entrada. Ou seja, as N linhas seguintes devem conter cada uma M inteiros que representam os pixels da imagem. Aps a imagem deixe uma linha em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.
Exemplo de Sada Teste 1 8 9 7 2 3 1 5 6 4 Teste 2 1 2 3 4 5 6 7 8 9 10 11 12

(esta sada corresponde ao exemplo de entrada acima)

Restricoes
0 <= N <= 1000 (N = 0 apenas para indicar o final da entrada) > 0 <= M <= 1000<code> (M = 0 apenas para indicar o final da entrada) > 0 <= X <= 1000<code> > 0 <= Y <= 1000<code> > 0 <= nmero de comandos de correao em cada conjunto de teste <= 1000<code> Added by: Wanderley Guimaraes Date: 2007-03-07 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2004

SPOJ Problem Set (obi)

1367. Proteja sua senha


Problem code: SENHA
Por questoes de segurana, muitos bancos hoje em dia estao alterando a forma como seus clientes digitam as senhas nos caixas eletrnicos, pois algum pode postar-se atrs do cliente e ver as teclas a medida em que ele as digita. Uma alternativa bastante utilizada tem sido associar os dez dgitos a cinco letras, de forma que cada letra esteja associada a dois dgitos, conforme o exemplo abaixo:
___ ___ | | | | | 1 | | | | | A |---| | | | | | 7 | |___|___| ___ ___ | | | | | 3 | | | | | B |---| | | | | | 9 | |___|___| ___ ___ | | | | | 0 | | | | | C |---| | | | | | 8 | |___|___| ___ ___ | | | | | 5 | | | | | D |---| | | | | | 6 | |___|___| ___ ___ | | | | | 2 | | | | | E |---| | | | | | 4 | |___|___|

As associaoes entre nmeros e letras sao mostradas como botoes numa tela sensvel ao toque, permitindo que o cliente selecione os botoes correspondentes a senha. Considerando a disposiao dos botoes da figura acima, a senha 384729 seria digitada como BCEAEB (note que a mesma seqencia de letras seria digitada para outras senhas, como por exemplo 982123). Cada vez que o cliente usa o caixa eletrnico, as letras utilizadas sao as mesmas (de A a E), com os botoes nas mesmas posioes, mas os dgitos sao trocados de lugar. Assim, caso um intruso veja (mesmo que mais de uma vez) a seqencia de letras digitada, nao possvel notar facilmente qual a senha do cliente do banco.

Tarefa
Dada uma seqencia de associaoes entre letras e nmeros, e as letras digitadas pelo cliente do banco para cada uma dessas associaoes, voce deve escrever um programa para determinar qual a senha do cliente.

Entrada
A entrada composta de vrios conjuntos de testes. A primeira linha de um conjunto de testes contm um inteiro N, que indica o nmero de associaoes entre letras e nmeros e as senhas digitadas (2 <= N <= 10). As N linhas seguintes contem as entradas da seguinte forma: 10 dgitos, em ordem de associaao, para as letras de A a E (2 dgitos para a letra A, 2 para a B e assim sucessivamente) e 6 letras que representam a senha codificada conforme os dgitos anteriores. As N associaoes fornecidas em um conjunto de testes serao sempre suficientes para definir univocamente a senha do cliente. O final da entrada indicado por N = 0.

Exemplo 2 1 7 3 9 9 0 7 5 3 0 1 2 3 1 3 5 4 3 2 0 4 0

de Entrada 0 8 5 6 2 4 B C E A E B 8 4 6 2 3 1 E C C B D A 4 5 6 7 8 9 B C D D E E 6 8 7 9 0 2 E B C D C D 5 9 7 6 8 1 A C D D E C

Sada
Para cada conjunto de teste da entrada, seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A segunda linha deve conter a senha do cliente, com um espao aps cada dgito. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.
Exemplo de Sada Teste 1 3 8 4 7 2 9 Teste 2 2 5 6 7 8 9

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
2 <= N <= 10 (N = 0 apenas para indicar o fim da entrada) Added by: Wanderley Guimaraes Date: 2007-03-07 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2004

SPOJ Problem Set (obi)

1368. Orkut
Problem code: ORKUT
Larissa acaba de entrar para o Orkut, um site na internet que permite que as pessoas se renam em comunidades e grupos de amigos. Como ela acabou de se registrar, ela ainda nao possui muitos amigos na sua lista de contatos. Aps fazer uma pesquisa, ela descobriu que os seus antigos amigos de escola (que adoravam mexer com computadores) tambm fazem parte do Orkut. Larissa entao decidiu cham-los para serem seus amigos virtuais. Porm, eles resolveram brincar com a Larissa, e cada um deles s vai aceitar o pedido de Larissa quando ela j for amiga virtual de alguns dos outros amigos do grupo. Assim, para conseguir ter todos os seus antigos amigos de escola na sua lista de amigos do Orkut, ela deve cumprir as exigencias de cada um deles.

Tarefa
Larissa acha que pode encontrar uma seqencia de nomes dos amigos, de modo que se ela pedir a cada um deles para ser sua amiga no Orkut, obedecendo a seqencia, todas as exigencias serao cumpridas e todos eles irao aceitar o seu pedido. Larissa precisa da sua ajuda para resolver esse problema de forma rpida. A sua tarefa escrever um programa para encontrar uma seqencia de nomes que resolva o problema, ou dizer que nao possvel encontrar tal seqencia.

Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um inteiro N que indica o nmero de antigos amigos da Larissa (1 <= N <= 30). A linha seguinte ir conter N nomes de amigos, separados por espao em branco. Cada nome nao ter mais de 15 letras, e serao todos distintos. Nas prximas N linhas serao indicadas as exigencias que a Larissa deve cumprir. Cada linha descreve a exigencia de um amigo e comear com o nome desse amigo, seguido de um nmero M (0 <= M <= N - 1), que indica o nmero de pessoas que aquele amigo quer que a Larissa seja amiga antes, e seguido pelos M nomes de amigos (cada item na linha separado por espao em branco). O final da entrada indicado por N = 0.
Exemplo de Entrada 5 Joao Maria Tadeu Jose Ricardo Joao 2 Maria Ricardo Maria 1 Tadeu Jose 1 Joao Tadeu 0 Ricardo 0 3 Joao Maria Renata Maria 1 Joao Joao 1 Renata Renata 1 Maria 0

Sada
Para cada conjunto de teste seu programa deve produzir tres linhas na sada. A primeira linha dever conter um identificador do conjunto de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A segunda linha deve conter a seqencia de nomes de amigos (cada nome seguido de um espao em branco) que resolve o problema da Larissa, ou a palavra "impossivel", quando nao houver uma seqencia possvel (note a ausencia de acentuaao). Se existir mais de uma seqencia de amigos que resolve o problema, imprima qualquer uma delas (mas apenas uma). A terceira linha dever ser deixada em branco. A grafia mostrada no Exemplo de Sada abaixo dever ser seguida rigorosamente.
Exemplo de Sada Teste 1 Ricardo Tadeu Maria Joao Jose Teste 2 impossivel

(esta sada corresponde ao exemplo de entrada acima)

Restrioes
0 <= N <= 30 (N = 0 apenas para indicar o fim da entrada) > 0 <= M <= N - 1<code> > Cada nome de amigo ter no mximo 15 letras<p> Added by: Wanderley Guimaraes Date: 2007-03-07 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2004

SPOJ Problem Set (obi)

1387. Transmissao de Energia


Problem code: ENERGIA
A distribuiao de energia para as diversas regioes do pas exige um investimento muito grande em linhas de transmissao e estaoes transformadoras. Uma linha de transmissao interliga duas estaoes transformadoras. Uma estaao transformadora pode estar interligada a uma ou mais outras estaoes transformadoras, mas devido ao alto custo nao pode haver mais de uma linha de transmissao interligando duas estaoes. As estaoes transformadoras sao interconectadas de forma a garantir que a energia possa ser distribuda entre qualquer par de estaoes. Uma rota de energia entre duas estaoes e 1 e e k definida como uma sequencia (e 1 , l 1 , e 2 , l 2 , ...e k-1 , l k-1 , e k ) onde cada e i uma estaao transformadora e cada l i uma linha de transmissao que conecta e i e i+1 . Os engenheiros de manutenao do sistema de transmissao de energia consideram que o sistema est em estado normal se h pelo menos uma rota entre qualquer par de estaoes, e em estado de falha caso contrrio. Um grande tornado passou pelo pas danificando algumas das linhas de transmissao, e os engenheiros de manutenao do sistema de transmissao de energia necessitam de sua ajuda.

Tarefa
Dada a configuraao atual do sistema de transmissao de energia, descrevendo as interconexoes existentes entre as estaoes, escreva um programa que determine o estado do sistema.

Entrada
A entrada composta de vrios casos de teste. A primeira linha de um caso de teste contm dois nmeros inteiros E e L indicando respectivamente o nmero de estaoes (3 <= E <= 100) e o nmero de linhas de transmissao do sistema (E - 1 <= L <= E (E - 1)/2) que continuam em funcionamento aps o tornado. As estaoes sao identificadas por nmeros de 1 a E. Cada uma das L linhas seguintes contm dois inteiros X e Y que indicam que existe uma linha de transmissao interligando a estaao X a estaao Y. O final da entrada indicado por E = L = 0. A entrada deve ser lida do dispositivo de entrada padrao.

Sada
Para cada caso de teste seu programa deve produzir tres linhas na sada. A primeira identifica o conjunto de teste no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter a palavra "normal", se, para cada par de estaoes, houver uma rota que as conecte, e a palavra "falha" caso nao haja uma rota entre algum par de estaoes. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

A sada deve ser escrita no dispositivo de sada padrao.

Exemplos
Entrada: 6 7 1 2 2 3 3 4 4 5 5 6 6 2 1 5 4 3 1 2 4 2 1 4 0 0 Saida: Teste 1 normal Teste 2 falha

Restrioes
3 <= E <= 100 E - 1 <= L <= E (E - 1)/2

Added by: Wanderley Guimaraes Date: 2007-03-09 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2005 Programacao Nivel 2

SPOJ Problem Set (obi)

1388. Vivo ou Morto


Problem code: VIVO
Toda criana certamente j brincou de "vivo ou morto". A brincadeira dirigida por um "chefe" (um adulto), que comanda dois ou mais participantes (crianas). A brincadeira composta de rodadas. No incio, os participantes sao organizados pelo chefe em fila nica. A cada rodada o chefe grita "vivo" ou "morto" e todos os participantes tentam seguir sua ordem, levantando-se ao ouvir a palavra "vivo" ou abaixando-se ao ouvir a palavra "morto". Um participante que nao segue a ordem do chefe eliminado, deixando o seu lugar na fila. Os participantes remanescentes agrupam-se novamente em fila nica, preenchendo as posioes dos participantes eliminados, mas mantendo suas posioes relativas. O jogo continua at que uma rodada seja composta por exatamente um participante. Tal participante dito o vencedor do jogo. Por exemplo, considere que a brincadeira inicie com cinco participantes, identificados por nmeros inteiros de 1 a 5, e que o chefe organize a fila na ordem 3 -> 2 -> 1 -> 4 -> 5. Se na primeira rodada forem eliminados os participantes 2 e 4, a fila da segunda rodada ser formada por 3 -> 1 -> 5; se na segunda rodada for eliminado o participante 1, a fila da terceira rodada ser formada por 3 -> 5. Se na terceira rodada o participante 3 for eliminado, o vencedor da brincadeira ser o participante 5.

Tarefa
Sua tarefa escrever um programa que determine o vencedor de uma partida de "vivo ou morto", a partir da informaao das ordens dadas pelo chefe e das aoes executadas pelos participantes em cada rodada.

Entrada
A entrada constituda de vrios casos de teste, cada um representando uma partida. A primeira linha de um caso de teste contm dois nmeros inteiros P e R indicando respectivamente a quantidade inicial de participantes (2 <= P <= 100) e quantidade de rodadas da partida (1 <= R <= 100). Os participantes sao identificados por nmeros de 1 a P. A segunda linha de um caso de teste descreve a fila organizada pelo chefe, contendo P nmeros inteiros distintos x1, x2, . . . xP , onde x1 representa o identificador do participante no primeiro lugar na fila, x2 representa o identificador do participante no segundo lugar na fila, e assim por diante (1 <= xi <= P). Cada uma das R linhas seguintes representa uma rodada, contendo um nmero inteiro inteiro N indicando o nmero de participantes da rodada (2 <= N <= P), um nmero inteiro inteiro J representando a ordem dada pelo chefe (0 <= J <= 1) e N nmeros inteiros Ai representando a aao do participante colocado na i-sima posiao na fila (0 <= Ai <= 1). Ordens e aoes "vivo" sao representadas pelo valor 1, ordens e aoes "morto" pelo valor zero. Cada partida tem exatamente um vencedor, determinado somente na ltima rodada fornecida no caso de teste correspondente. O final da entrada indicado por P = R = 0.

Sada
Para cada caso de teste seu programa deve produzir tres linhas. A primeira identifica o conjunto de teste no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o identificador do vencedor. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 2 2 2 1 2 1 1 1 2 1 1 0 5 4 3 2 1 4 5 5 1 1 1 1 1 1 5 0 0 1 0 1 0 3 0 0 1 0 2 1 0 1 0 0 Sada: Teste 1 2 Teste 2 5

Restrioes
2 1 1 2 0 0 <= <= <= <= <= <= P <= 100 R <= 100 xi <= P, N <= P J <= 1 Ai <= 1, (P = 0 apenas para indicar o fim da entrada) (R = 0 apenas para indicar o fim da entrada) para 1 <= i <= P

para 1 <= i <= N

Added by: Wanderley Guimaraes Date: 2007-03-09 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpiada Brasileira de Informatica 2005 Programacao Nivel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

1389. Pedido de Desculpas


Problem code: DESCULPA
Cuca saiu para jogar futebol com os amigos e esqueceu do encontro que tinha com a namorada. Ciente da mancada, Cuca deseja elaborar um pedido especial de desculpas. Resolveu entao enviar flores e usar o cartao da floricultura para escrever um pedido especial de desculpas. Cuca buscou na internet um conjunto de frases bonitas contendo a palavra desculpe (que pode ocorrer mais de uma vez na mesma frase). No entanto, o cartao da floricultura pequeno, e nem todas as frases que Cuca colecionou poderao ser aproveitadas. Cuca quer aproveitar o espao do cartao, onde cabe um nmero limitado de caracteres, para escrever um sub-conjunto das frases coletadas de modo que aparea o mximo de vezes possvel a palavra desculpe.

Tarefa
Escreva um programa que, dados o nmero de caracteres que cabem no cartao e a quantidade de frases coletadas (com os respectivos comprimentos e os nmeros de ocorrencias da palavra desculpe), determine o nmero mximo de vezes que a palavra aparece, utilizando apenas as frases colecionadas, sem repet-las.

Entrada
A entrada constituda de vrios casos de teste. A primeira linha de um caso de teste contm dois nmeros inteiros C e F indicando respectivamente o comprimento do cartao em caracteres (8 <= C <= 1000) e o nmero de frases coletadas (1 <= F <= 50). Cada uma das F linhas seguintes descreve uma frase coletada. A descriao composta por dois inteiros N e D que indicam respectivamente o nmero de caracteres na frase (8 <= N <= 200) e quantas vezes a palavra desculpe ocorre na frase (1 <= D <= 25). O final da entrada indicado por C = F = 0.

Sada
Para cada caso de teste seu programa deve produzir tres linhas na sada. A primeira identifica o conjunto de teste no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter o mximo nmero de vezes que a palavra desculpe pode aparecer no cartao, considerando que apenas frases coletadas podem ser utilizadas, e cada frase nao utilizada mais de uma vez. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 200 4 100 4 100 1 120 2 80 5 40 3 10 1 10 1 20 2 0 0 Sada: Teste 1 9 Teste 2 4

Restrioes
8 1 8 1 <= <= <= <= C F N D <= <= <= <= 1000 (C = 0 apenas para indicar o fim da entrada) 50 (S = 0 apenas para indicar o fim da entrada) 200 25

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2007-03-09 1s 50000B

Pyramid (Intel Pentium III 733 MHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: Olimpiada Brasileira de Informatica 2005 Programacao Nivel 2

SPOJ Problem Set (obi)

1390. Mini-Poker
Problem code: OBIPOKER
Mini-Poker o nome de um jogo de cartas que uma simplificaao de Poker, um dos mais famosos jogos de cartas do mundo. Mini-Poker jogado com um baralho normal de 52 cartas, com quatro naipes (copas, paus, espadas e ouro), cada naipe compreendendo treze cartas (s, 2, 3, 4, 5, 6, 7, 8, 9, 10, Valete, Dama, Rei). No incio do jogo, cada jogador recebe cinco cartas. O conjunto de cinco cartas vale um certo nmero de pontos, de acordo com as regras descritas abaixo. Diferentemente do jogo de Poker normal, em Mini-Poker o naipe das cartas desconsiderado. Assim, para simplificar a descriao do jogo, vamos utilizar os nmeros de 1 a 13 para identificar as cartas do baralho, na ordem dada acima. Uma outra diferena que pode ocorrer empate entre mais de um vencedor; nesse caso os vencedores dividem o premio. As regras para pontuaao em Mini-Poker sao as seguintes: 1. Se as cinco cartas estao em seqencia a partir da carta x (ou seja, os valores das cartas sao x, x+1, x+2, x+3 e x+4), a pontuaao x+200 pontos. Por exemplo, se as cartas recebidas sao 10, 9, 8, 11 e 12, a pontuaao 208 pontos. 2. Se h quatro cartas iguais x (uma quadra, ou seja, os valores das cartas sao x, x, x, x e y), a pontuaao x+180 pontos. Por exemplo, se as cartas recebidas sao 1, 1, 1, 10 e 1, a pontuaao 181 pontos. 3. Se h tres cartas iguais x e duas outras cartas iguais y (uma trinca e um par, ou seja, os valores das cartas sao x, x, x, y e y), a pontuaao x + 160 pontos. Por exemplo, se as cartas recebidas sao 10, 4, 4, 10 e 4, a pontuaao 164 pontos. 4. Se h tres cartas iguais x e duas outras cartas diferentes y e z (uma trinca, ou seja, os valores das cartas sao x, x, x, y e z), a pontuaao x + 140 pontos. Por exemplo, se as cartas recebidas sao 2, 3, 2, 2 e 13, a pontuaao 142 pontos. 5. Se h duas cartas iguais x, duas outras cartas iguais y (x != y) e uma outra carta distinta z (dois pares, ou seja, os valores das cartas sao x, x, y, y e z), a pontuaao 3 x + 2 y + 20 pontos, em que x > y. Por exemplo, se as cartas recebidas sao 12, 7, 12, 8 e 7, a pontuaao 70 pontos. 6. Se h apenas duas cartas iguais x e as outras sao todas distintas (um par, ou seja, os valores das cartas sao x, x, y, z e t), a pontuaao x pontos. Por exemplo, se as cartas recebidas sao 12, 13, 5, 8 e 13, a pontuaao 13 pontos. 7. Se todas as cartas sao distintas, nao h pontuaao.

Tafefa
Escreva um programa que, fornecidas as cartas dadas a um jogador, calcule pontuaao do jogador naquela jogada.

Entrada
A entrada composta por vrios casos de teste, cada um correspondendo a uma jogada. A primeira linha da entrada contm um inteiro N que indica o nmero de casos de teste (1 <= N <= 100). Cada uma das N linhas seguintes contm cinco nmeros inteiros C1,C2,C3,C4 e C5, representando as cinco cartas recebidas por um jogador (1 <= C1,C2,C3,C4,C5 <= 13).

Sada
Para cada caso de teste da entrada, seu programa deve produzir tres linhas na sada. A primeira linha deve conter um identificador do caso de teste, no formato "Teste n", onde n numerado seqencialmente a partir de 1. A segunda linha deve conter a pontuaao do jogador considerando as cinco cartas recebidas. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente.

Exemplo
Entrada: 2 12 3 10 3 12 1 2 3 5 4 Sada: Teste 1 62 Teste 2 201

Restrioes
1 <= N <= 100 1 <= C1,C2,C3,C4,C5 <= 13

Added by: Wanderley Guimaraes Date: 2007-03-09 Time limit: 1s Source limit:50000B Languages: All Resource: OBI 2005 Programaao Nvel 2

SPOJ Problem Set (obi)

2606. Frota de Txi


Problem code: FROTATAX
A Companhia de Txi Tabajara (CTT) uma das maiores empresas de transporte do pas. Possui uma vasta frota de carros e opera em todas as grandes cidades. Recentemente a CTT modernizou a sua frota, adquirindo um lote de 500 carros bi-combustveis (carros que podem utilizar como combustvel tanto lcool quanto gasolina). Alm do maior conforto para os passageiros e o menor gasto com manutenao, com os novos carros possvel uma reduao adicional de custo: como o preo da gasolina est sujeito a variaoes muito bruscas e pode ser vantagem, em certos momentos, utilizar lcool como combustvel. Entretanto, os carros possuem um melhor desempenho utilizando gasolina, ou seja, em geral, um carro percorre mais quilmetros por litro de gasolina do que por litro de lcool.

Tarefa
Voce deve escrever um programa que, dados o preo do litro de lcool, o preo do litro de gasolina e os quilmetros por litro que um carro bi-combustvel realiza com cada um desses combustveis, determine se mais econmico abastecer os carros da CTT com lcool ou com gasolina. No caso de nao haver diferena de custo entre abastecer com lcool ou gasolina a CTT prefere utilizar gasolina.

Entrada
A entrada composta por uma linha contendo quatro nmeros reais com precisao de duas casas decimais A, G, Ra e Rg , representando respectivamente o preo por litro do lcool, o preo por litro da gasolina, o rendimento (km/l) do carro utilizando lcool e o rendimento (km/l) do carro utilizando gasolina.

Sada
A sada deve ser composta por uma nica linha contendo o caractere A se mais econmico abastecer a frota com lcool ou o caractere G se mais econmico ou indiferente abastecer a frota com gasolina.

Exemplo 1
Entrada: 1.20 2.30 10.00 15.00 Sada: A

Exemplo 2
Entrada: 1.00 1.00 9.00 9.01 Sada: G

Exemplo 3
Entrada: 1.00 1.00 11.00 11.00 Sada: G

Restrioes
0.01 <= A <= 10.00 0.01 <= G <= 10.00 0.01 <= Ra <= 20.00

0.01 <= Rg <= 20.00 Added by: Wanderley Guimaraes Date: 2008-04-02 Time limit: 1s-10s Source limit:50000B Languages: All Resource: Olimpada Brasileira de Informtica 2005 -- Programaao Nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

2607. Campo de Minhocas


Problem code: MINHOCA
Minhocas sao muito importantes para a agricultura e como insumo para produao de raao animal. A Organizaao para Bioengenharia de Minhocas (OBM) uma entidade nao governamental que promove o aumento da produao, utilizaao e exportaao de minhocas. Uma das atividades promovidas pela OBM a manutenao de uma fazenda experimental para pesquisa de novas tecnologias de criaao de minhocas. Na fazenda, a rea destinada as pesquisas de formato retangular, dividida em clulas quadrangulares de mesmo tamanho. As clulas sao utilizadas para testar os efeitos, na produao de minhocas, de variaoes de espcies de minhocas, tipos de terra, de adubo, de tratamento, etc. Os pesquisadores da OBM mantem um acompanhamento constante do desenvolvimento das minhocas em cada clula, e tem uma estimativa extremamente precisa da produtividade em cada uma das clulas. A figura abaixo mostra um mapa da fazenda, mostrando a produtividade estimada de cada uma das clulas.

Um pesquisador da OBM inventou e construiu uma mquina colhedeira de minhocas, e quer test- la na fazenda. A mquina tem a largura de uma clula, e em uma passada pelo terreno de uma clula colhe todas as minhocas dessa clula, separando-as, limpando-as e empacotando-as. Ou seja, a mquina eliminara uma das etapas mais intensivas de mao de obra no processo de produao de minhocas. A mquina, porm, ainda est em desenvolvimento e tem uma restriao: nao faz curvas, podendo movimentar-se somente em linha reta. Decidiu-se entao que seria efetuado um teste com a mquina, de forma a colher o maior nmero possvel de minhocas em uma unica passada, em linha reta, de lado a lado do campo de minhocas. Ou seja, a mquina deve colher todas as minhocas de uma coluna ou de uma linha de clulas do campo de minhocas (a linha ou coluna cuja soma das produtividades esperadas das clulas a maior possvel).

Tarefa
Escreva um programa que, fornecido o mapa do campo de minhocas, descrevendo a produtividade estimada em cada clula, calcule o nmero esperado total de minhocas a serem colhidas pela mquina durante o teste, conforme descrito acima.

Entrada
A primeira linha da entrada contm dois nmeros inteiros N e M, representando respectivamente o nmero de linhas (1 <= N <= 100) e o nmero de colunas (1 <= M <= 100) de clulas existentes no campo experimental de minhocas. Cada uma das N linhas seguintes contm M inteiros, representando as produtividades estimadas das clulas correspondentes a uma linha do campo de minhocas.

Sada
A sada deve ser composta por uma unica linha contendo um inteiro, indicando o nmero esperado total de minhocas a serem colhidas pela mquina durante o teste.

Exemplo 1
Entrada: 3 4 81 28 240 10 40 10 100 240 20 180 110 35 Sada: 450

Exemplo 2
Entrada: 4 1 100 110 0 100 Sada: 310

Restrioes 1 <= N <= 100 1 <= M <= 100 0 <= Produtividade de uma clula <= 500 0 <= Produtividade de uma linha ou coluna de clulas <= 50000 Added by: Wanderley Guimares Date: 2008-04-02 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: Olimpada Brasileira de Informtica 2005 -- Programao Nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

2608. Duende Perdido


Problem code: DUENDE
Gugo, o duende, ficou preso em uma caverna e precisa sair o mais rapidamente possvel. A caverna formada por saloes interligados por tneis, na forma de uma grade retangular, com N linhas e M colunas. Alguns dos saloes da caverna tem paredes de cristal. Duendes, como todos sabem, nao gostam de ficar em ambientes com qualquer tipo de cristal, pois seus organismos entram em ressonncia com a estrutura de cristais, e em casos extremos os duendes podem at mesmo explodir. Compreensivelmente, Gugo nao quer entrar em nenhum salao com parede de cristal. A figura abaixo mostra uma caverna com quatro linhas e cinco colunas de saloes; os saloes cinza tem paredes de cristal. A posiao inicial de Gugo indicada com um caractere *.

Tarefa
Voce deve escrever um programa que, dadas a configuraao da caverna e a posiao inicial de Gugo dentro da caverna, calcule qual o nmero mnimo de saloes pelos quais o duende deve passar antes de sair da caverna (nao contando o salao em que o duende est inicialmente), mas contando o salao que tem sada para o exterior).

Entrada
A caverna ser modelada como uma matriz de duas dimensoes, cujos elementos representam os saloes. Um salao que nao tem parede de cristal e que tem sada para o exterior da caverna representado pelo valor 0; um salao que nao tem parede de cristal e nao tem sada para o exterior representado pelo valor 1; um salao que tem parede de cristal representado pelo valor 2; e o salao em que o duende est inicialmente (que nao tem sada para o exterior e nem paredes de cristal) representado pelo valor 3. A figura abaixo mostra a representaao da caverna apresentada acima.

A primeira linha da entrada contm dois nmeros inteiros N e M que indicam respectivamente o nmero de linhas (1 <= N <= 10) e o nmero de colunas (1 <= M <= 10) da representaao da caverna. Cada uma das N linhas seguintes contm M nmeros inteiros Ci, descrevendo os saloes da caverna e a posiao inicial do duende (0 <= Ci <= 3). Voce pode supor que sempre h um trajeto que leva Gugo a sada da caverna.

Sada
Seu programa deve produzir uma unica linha na sada, contendo um nmero inteiro representando a quantidade mnima de saloes pelos quais Gugo deve passar antes de conseguir sair da caverna (nao contando o salao em que ele est inicialmente, mas contando o salao que tem sada para o exterior).

Exemplo 1
Entrada: 4 5 0 1 1 1 1 0 2 2 2 1 2 1 1 1 1 1 1 1 3 1 Sada: 8

Exemplo 2
Entrada: 1 10 2 0 1 1 3 1 1 1 0 1 Sada: 3

Restrioes 1 <= N <= 10 1 <= M <= 10 0 <= Ci <= 3 Added by: Wanderley Guimares Date: 2008-04-02 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: Olimpada Brasileira de Informtica 2005 -- Programao Nvel 1

SPOJ Problem Set (obi)

2609. Trilhas
Problem code: TRILHAS
Nos finais de semana Paulo faz longas caminhadas pelas bonitas trilhas que atravessam as matas vizinhas a sua cidade. Recentemente Paulo adquiriu um aparelho de GPS (siglas do ingles Sistema de Posicionamento Global) e com ele mapeou as mais belas trilhas da regiao. Paulo programou o GPS para armazenar, a intervalos regulares, a altitude do ponto corrente durante o trajeto. Assim, aps percorrer as trilhas com o seu GPS, Paulo tem informaoes que permitem por exemplo produzir grficos como os abaixo: [IMAGE] Paulo tem uma nova namorada, e quer convence-la a passear junto com ele pelas trilhas. Para o primeiro passeio juntos, Paulo quer escolher uma trilha "fcil". Segundo o seu critrio, a trilha mais fcil a que, em um dos sentidos do percurso, exige o menor esforo de subida. O esforo exigido em um trecho de subida proporcional ao desnvel do trecho.

Tarefa
Dadas as informaoes colhidas por Paulo sobre distncias e altitudes de um conjunto de trilhas, voce deve escrever um programa que determine qual a trilha que exige o menor esforo de subida.

Entrada
A primeira linha da entrada contm um nmero inteiro N que indica o nmero de trilhas. Cada uma das N linhas seguintes contm a descriao de uma trilha (1 <= N <= 100). As trilhas sao identificadas por nmeros de 1 a N. A ordem em que as trilhas aparecem na entrada determina os seus identificadores (a primeira trilha a de nmero 1, a segunda a de nmero 2, a ltima a de nmero N). A descriao de uma trilha inicia com um nmero inteiro M que indica a quantidade de pontos de mediao da trilha (2 <= M <= 1000), seguido de M nmeros inteiros Hi representando a altura dos pontos da trilha (medidos a intervalos regulares e iguais para todas as linhas). Paulo pode percorrer a trilha em qualquer sentido (ou seja, partindo do ponto de altitude H1 em direao ao ponto de altitude HM, ou partindo do ponto de altitude HM em direao ao ponto de altitude H1).

Sada
Seu programa deve produzir uma unica linha na sada, contendo um nmero inteiro representando o identificador da melhor trilha, conforme determinado pelo seu programa. Em caso de empate entre duas ou mais trilhas, imprima a de menor identificador.

Exemplo 1
Entrada: 5 4 498 500 498 498 10 60 60 70 70 70 70 80 90 90 100 5 200 190 180 170 160 2 1000 900 4 20 20 20 20 Sada: 2

Exemplo 2
Entrada: 3 5 600 601 600 601 600 4 500 499 500 499 4 300 300 302 300 Sada: 2

Restrioes 1 <= N <= 100 2 <= M <= 1000 0 <= Hi <= 1000 Added by: Wanderley Guimaraes Date: 2008-04-02 Time limit: 1s Source limit:50000B Languages: All Resource: Olimpada Brasileira de Informtica 2005 -- Programaao Nvel 1

SPOJ Problem Set (obi)

3773. Eleioes
Problem code: ELEICOES
O prefeito de Piraporinha do Sul foi afastado de seu cargo, devido a acusaoes de corrupao em contratos da prefeitura, e por isso foram convocadas novas eleioes para prefeito. Procurando uma renovaao poltica, a comissao eleitoral permitiu que mesmo candidatos de fora da cidade concorressem ao cargo de prefeito. Devido a essa nova regra, houve uma quantidade muito grande de candidatos a prefeitura. O software da comissao eleitoral de Piraporinha do Sul nao estava preparado para isso, e por isso voce foi contratado para escrever um programa que, dados os votos lanados pelos habitantes da cidade, decide qual candidato ganhou.

Entrada
A entrada composta de um nico caso de teste. A primeira linha contm um inteiro N representando o nmero de votos. Nas prximas N linhas, haver um inteiro X i , que representa o i-simo voto (os candidatos sao identificados por inteiros).

Sada
Para cada conjunto de teste da entrada seu programa deve produzir uma nica linha, contendo o nmero do candidato que venceu (aquele que obteve mais votos). Voce pode supor que existe apenas um vencedor.

Restrioes
1 <= N <= 100000 1 < X i <= 1000000000

Exemplo
Entrada 5 1000 1000 2588 4000 2587 Sada 1000 Entrada 4

4000 3500 4000 4000 Sada 4000

Added by: Wanderley Guimaraes Date: 2009-01-26 Time limit: 1s Source limit:50000B Languages: All Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

SPOJ Problem Set (obi)

3774. Fatorial
Problem code: FATORIA2
Dado um inteiro N, determine quanto vale N fatorial (escreve-se N!). O fatorial de um nmero o produto de todos os nmeros entre 1 e N, inclusive. Por exemplo, 5! = 5 4 3 2 1 = 120.

Entrada
A entrada composta por uma nica linha que contm o inteiro N.

Sada
A sada deve consistir de apenas uma linha contendo o valor de N!.

Restrioes
0 <= N <= 12

Exemplo
Entrada 2 Sada 2 Entrada 3 Sada 6

Added by: Wanderley Guimaraes Date: 2009-01-26 Time limit: 1s Source limit:50000B Languages: All Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

SPOJ Problem Set (obi)

3775. Fliperama
Problem code: FLIPERAM
Bebe-bebe um jogo muito popular de fliperama. E, como a maioria dos jogos de fliperama, ele deve mostrar as maiores pontuaoes. Para esse fim, a companhia Otori te contratou. Escreva um programa que, dada a lista de todas as pontuaoes dos jogos de Bebe-bebe, mostra os melhores placares em ordem decrescente.

Entrada
A entrada composta de um nico caso de teste. A primeira linha consiste de dois inteiros N e M, dizendo quantas partidas foram jogadas de Bebe-bebe e quantas linhas cabem no mostrador de melhores rankings. As N linhas seguintes contem cada uma um inteiro indicando a pontuaao obtida em cada jogo.

Sada
Seu programa deve imprimir M linhas, contendo as M maiores pontuaoes em ordem decrescente.

Restrioes
1 <= N <= 10000 1 <= M <= 500 M <= N

Exemplo
Entrada 7 4 100 200 200 150 30 524 942 Sada 942 524 200 200 Entrada 2 1 4000

2000 Sada 4000

Added by: Wanderley Guimaraes Date: 2009-01-26 Time limit: 1s Source limit:50000B Languages: All Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

SPOJ Problem Set (obi)

3776. rvore Genealgica


Problem code: GENEAL
A empresa Genesis faz vrios servios dedicados a famlias, principalmente para descobrir parentes e parentescos perdidos. Para mostrar a eficiencia de seus servios, a Genesis quer, para cada rvore genealgica que ela tem, achar o par de parentes com parentesco mais distante. Para isso, eles definiram uma "funao-parentesco" definida da seguinte forma: 1. grau(A, B) = 0, se A = B 2. grau(A, B) = 1 + min{grau(pai(A), B), grau(A, pai(B))}, se A != B Voce deve fazer um programa que, dado uma rvore genealgica, imprime o nome dos dois parentes com maior grau de parentesco.

Entrada
A entrada composta de um nico caso de teste. A primeira linha contm um nmero inteiro positivo N, que indica o nmero de relaoes pai-filho que serao descritas. As N linhas seguintes contem duas strings cada, P e F, indicando que P pai de F.

Sada
Seu programa deve imprimir uma nica linha contendo os nomes do par de parentes com maior grau de parentesco, e esse grau. Essas duas strings devem estar em ordem alfabtica; em caso de empate, voce pode imprimir qualquer par com essa caracterstica.

Restrioes
2 <= N <= 1000 Todos os nomes tem tamanho mximo 50.

Exemplo
Entrada 11 arnaldo daniel alfredo rafael alfredo deborah angela marcelo julio arnaldo angela elaine angela guilherme arnaldo renato marcelo beatriz julio angela julio alfredo Sada

beatriz daniel 5 Entrada 5 a b b c a d d e e f Sada c f 5

Added by: Wanderley Guimaraes Date: 2009-01-27 Time limit: 1s Source limit:50000B Languages: All except: TCL SCALA ERL TECS JS Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

SPOJ Problem Set (obi)

3826. Miojo
Problem code: MIOJO
Joao um fantico por miojos; ele os adora, e, como era de se esperar, ele levou vrios pacotes quando foi acampar com seus colegas. Como Joao s gosta de miojos feitos com o tempo exato, ele se deseperou ao perceber que havia esquecido seu relgio em casa. Por sorte, ele conseguiu, no caminho, comprar duas ampulhetas de duraoes diferentes. Por exemplo, se o miojo precisa de 3 minutos para ficar pronto, e Joao tiver uma ampulheta de 5 minutos e outra de 7, uma possvel forma de cozinhar o miojo : 1. 2. 3. 4. Joao comea virando as duas ampulhetas ao mesmo tempo. Quando a areia da ampulheta de 5 minutos se esgotar, Joao torna a vir-la. Joao comea a preparar o miojo quando a areia da ampulheta de 7 minutos acabar. Joao tira o miojo do fogo quando a ampulheta de 5 minutos acabar novamente.

Dessa forma, o miojo ficar 3 minutos no fogo (do minuto 7 ao minuto 10). Assim, apesar do miojo levar apenas tres minutos para ser cozido, ele precisa de 10 minutos para ficar pronto. Faa um programa que, dado o tempo de preparo do miojo, e os tempos das duas ampulhetas (ambos maiores que o tempo do miojo), determina o tempo mnimo necessrio para o miojo ficar pronto. Voce pode supor que sempre possvel cozinhar o miojo no tempo correto.

Entrada
A entrada contm um nico caso de teste, composto por uma nica linha, que contm tres inteiros T, A e B, representando o tempo necessrio para o preparo do miojo, o tempo da primeira ampulheta e o tempo da segunda ampulheta respectivamente.

Sada
Seu programa deve produzir uma nica linha na sada, contendo o tempo mnimo para o preparo do miojo.

Restrioes
0 <= T <= 10000 T < A, B <= 40000

Exemplo
Entrada 3 5 7 Sada 10

Entrada 14 15 22 Sada 44

Added by: Wanderley Guimaraes Date: 2009-02-07 Time limit: 1s Source limit:50000B Languages: All Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

3828. Primo
Problem code: PRIMO
Tarefa
Dado um inteiro N, verifique se N primo.

Entrada
A entrada composta por um nico caso de teste, composto por uma nica linha que contm o inteiro N.

Sada
Seu programa deve produzir uma nica linha, contendo a palavra "sim", se N for primo, e "nao", caso contrrio (note a ausencia de acentuaao).

Restrioes
|N| < 2 31

Exemplo
Entrada 7 Sada sim Entrada 10 Sada nao

Added by: Wanderley Guimares Date: 2009-02-07 Time limit: 1s Source limit:50000B Cluster: Pyramid (Intel Pentium III 733 MHz) Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

SPOJ Problem Set (obi)

3829. Quadrados
Problem code: QUADRAD2
Dado um inteiro N, determine quanto vale N 2 .

Entrada
A entrada composta por um nico caso de teste, composto por uma nica linha que contm o inteiro N.

Sada
Seu programa deve produzir uma nica linha, contendo o valor de N 2 .

Restrioes
|N| <= 10000

Exemplo
Entrada 1 Sada 1 Entrada 4 Sada 16 Entrada 2 Sada 4

Added by: Wanderley Guimaraes Date: 2009-02-07 Time limit: 1s Source limit:50000B Languages: All Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

SPOJ Problem Set (obi)

3830. Soma
Problem code: SOMA
Dada uma lista de N inteiros, encontre a soma de todos eles.

Entrada
A entrada composta de um nico caso de teste. A primeira linha contm um inteiro positivo N. As N linhas seguintes contem cada uma um inteiro X, representando os N nmeros a serem somados.

Sada
Seu programa deve produzir uma nica linha na sada, contendo a soma de todos os N inteiros.

Restrioes
0 <= N <= 50 |X| <= 5000

Exemplo
Entrada 2 2 3 Sada 5 Entrada 3 1 5 3 Sada 9

Added by: Wanderley Guimaraes Date: 2009-02-07 Time limit: 1s Source limit:50000B Languages: All Resource: Treino para OBI de 2006 - Fbio Moreira & Daniel Fleischman

SPOJ Problem Set (obi)

8703. Conta de gua


Problem code: CONTA1
A empresa local de abastecimento de gua, a Saneamento Bsico da Cidade (SBC), est promovendo uma campanha de conservaao de gua, distribuindo cartilhas e promovendo aoes demonstrando a importncia da gua para a vida e para o meio ambiente. Para incentivar mais ainda a economia de gua, a SBC alterou os preos de seu fornecimento de forma que, proporcionalmente, aqueles clientes que consumirem menos gua paguem menos pelo metro cbico. Todo cliente paga mensalmente uma assinatura de R$ 7, que inclui uma franquia de 10 m^3 de gua. Isto , para qualquer consumo entre 0 e 10 m^3 , o consumidor paga a mesma quantia de R$ 7 reais (note que o valor da assinatura deve ser pago mesmo que o consumidor nao tenha consumido gua). Acima de 10 m^3 cada metro cbico subsequente tem um valor diferente, dependendo da faixa de consumo. A SBC cobra apenas por quantidades inteiras de metros cbicos consumidos. A tabela abaixo especifica o preo por metro cbico para cada faixa de consumo: Faixa de consumo (m^3) at 10 11 a 30 31 a 100 101 em diante Preo (m^3) includo na franquia R$ 1 R$ 2 R$ 5

Assim, por exemplo, se o consumo foi de 120 m^3 , o valor da conta : 7 reais da assinatura bsica; 20 reais pelo consumo no intervalo 11 - 30 m^3; 140 reais pelo consumo no intervalo 31 - 100 m^3; 100 reais pelo consumo no intervalo 101 - 120 m^3. Logo o valor total da conta de gua R$ 267.

Tarefa
Escreva um programa que, dado o consumo de uma residencia em m3 , calcula o valor da conta de gua daquela residencia.

Entrada
A nica linha da entrada contm um nico inteiro N, indicando o consumo de gua da residencia, em m^3 (0 <= N <= 10^3).

Sada
Seu programa deve imprimir uma nica linha, contendo o valor da conta de gua daquela residencia.

Exemplo
Entrada 8 Sada 7 Entrada 14 Sada 11 Entrada 42 Sada 51

Added by: Wanderley Guimares Date: 2011-04-10 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 1 nvel 1

SPOJ Problem Set (obi)

8704. Copa do mundo


Problem code: COPA1
Este ano tem Copa do Mundo! O pas inteiro se prepara para torcer para a equipe canarinho conquistar mais um ttulo, tornando-se hexacampea. Na Copa do Mundo, depois de uma fase de grupos, dezesseis equipes disputam a Fase final, composta de quinze jogos eliminatrios. A figura abaixo mostra a tabela de jogos da Fase final:

Na tabela de jogos, as dezesseis equipes finalistas sao representadas por letras maisculas (de A a P), e os jogos sao numerados de 1 a 15. Por exemplo, o jogo 3 entre as equipes identificadas por E e F; o vencedor desse jogo enfrentar o vencedor do jogo 4, e o perdedor ser eliminado. A equipe que vencer os quatro jogos da Fase final ser a campea (por exemplo, para a equipe K ser campea ela deve vencer os jogos 6, 11, 14 e 15.

Tarefa
Dados os resultados dos quinze jogos da Fase final, escreva um programa que determine a equipe campea.

Entrada
A entrada composta de quinze linhas, cada uma contendo o resultado de um jogo. A primeira linha contm o resultado do jogo de nmero 1, a segunda linha o resultado do jogo de nmero 2, e assim por diante. O resultado de um jogo representado por dois nmeros inteiros M e N separados por um espao em branco, indicando respectivamente o nmero de gols da equipe representada a esquerda e a direita na tabela de jogos (0 <= M <= 20, 0 <= N <= 20 e M != N).

Sada
Seu programa deve imprimir uma nica linha, contendo a letra identificadora da equipe campea.

Exemplo
Entrada 4 1 1 0 0 4 3 1 2 3 1 2 2 0 0 2 1 2 4 3 0 1 3 2 3 4 1 4 1 0 Sada F Entrada 2 0 1 0 2 1 1 0 1 0 1 2 1 2 1 0 2 1 1 0 0 1 0 2 2 1 1 0 2 1 Sada A

Added by: Wanderley Guimares Date: 2011-04-10 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 1 nvel 1

SPOJ Problem Set (obi)

8776. Batalha naval


Problem code: BATALHA2
Pedro e Paulo gostam muito de jogar batalha naval; apesar de serem grandes amigos, Pedro desconfia que Paulo nao esteja jogando honestamente. Para tirar essa dvida, Pedro decidiu usar um programa de computador para verificar o resultado do jogo, mas Pedro nao sabe programar e por isso pediu a sua ajuda. O jogo de batalha naval jogado em um tabuleiro retangular com N linhas e M colunas. Cada posiao deste tabuleiro um quadrado que pode conter gua ou uma parte de um navio. Dizemos que dois quadrados sao vizinhos se estes possuem um lado em comum. Se duas partes de navio estao em posioes vizinhas, entao essas duas partes pertencem ao mesmo navio. A regra do jogo probe que os quadrados de duas partes de navios distintos tenham um canto em comum (em outras palavras, que quadrados de duas partes de navios distintos compartilhem um vrtice). Cada disparo que um jogador faz deve ser feito em um dos quadrados do tabuleiro do outro jogador. Um jogador informa ao outro a coluna e a linha do quadrado alvo do disparo. Para que um navio seja destrudo, o jogador deve acertar todas as partes deste navio. O jogador nao pode atirar no mesmo lugar mais de uma vez

Tarefa
Escreva um programa que, dadas a configuraao do tabuleiro e uma sequencia de disparos feitos por um jogador, determina o nmero de navios do outro jogador que foram destrudos.

Entrada
A primeira linha da entrada contm nmeros dois inteiros N e M (1 <= N <= 100 e M <= 100) representando respectivamente o nmero de linhas e de colunas do tabuleiro. As N seguintes linhas correspondem ao tabuleiro do jogo. Cada uma dessas linhas contm M caracteres. Cada caractere indica o contedo da posiao correspondente no tabuleiro. Se esse caractere for ., essa posiao contm gua; se for #, essa posiao contm uma parte de um navio. A prxima linha contm um nmero K que o nmero de disparos feitos pelo jogador (1 <= K <= N M). As prximas K linhas indicam os disparos feitos pelo jogador. Cada linha contm dois inteiros L e C, indicando a linha e a coluna do disparo feito pelo outro jogador (1 <= L <= N e 1 <= C <= M).

Sada
Seu programa deve imprimir uma nica linha contendo um nico nmero inteiro, o nmero de navios destrudo.

Exemplo
Entrada 5 5 ..#.# #.... ...#. #.... ...#. 5 1 3 1 4 1 5 2 1 3 4 Sada 4 Entrada 5 5 ..### ..... ##### ..... #.##. 5 5 1 5 2 1 3 1 4 1 5 Sada 2 Entrada 7 7 .#....# ###..## .#....# ....#.# .#..#.# .####.# ....... 8 1 1 1 2 2 1 2 2 2 3 3 2 5 2 6 2 Sada 1

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 1 nvel 2

SPOJ Problem Set (obi)

8777. Cometa
Problem code: COMETA2
O cometa Halley um dos cometas de menor perodo do Sistema Solar, completando uma volta em torno do Sol a cada 76 anos; na ltima ocasiao em que ele tornou-se visvel do planeta Terra, em 1986, vrias agencias espaciais enviaram sondas para coletar amostras de sua cauda e assim confirmar teorias sobre suas composioes qumicas.

Tarefa
Escreva um programa que, dado o ano atual, determina qual o prximo ano em que o cometa Halley ser visvel novamente do planeta Terra. Se o ano atual um ano de passagem do cometa, considere que o cometa j passou nesse ano (ou seja, considere sempre o prximo ano de passagem, nao considerando o ano atual).

Entrada
A nica linha da entrada contm um nico inteiro A (2010 A 10 4 ), indicando o ano atual.

Sada
Seu programa deve imprimir uma nica linha, contendo um nmero inteiro, indicando o prximo ano em que o cometa Halley ser visvel novamente do planeta Terra.

Exemplo
Entrada 2010 Sada 2062 Entrada 10000 Sada 10042 Entrada 2062 Sada 2138

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 1 nvel 2

SPOJ Problem Set (obi)

8778. Elevador
Problem code: ELEVADO2
A Subindo Bem Confortavelmente (SBC) uma empresa tradicional, com mais de 50 anos de experiencia na fabricaao de elevadores. Todos os projetos da SBC seguem as mais estritas normas de segurana, mas infelizmente uma srie de acidentes com seus elevadores manchou a reputaao da empresa. Ao estudar os acidentes, os engenheiros da companhia concluram que, em vrios casos, o acidente foi causado pelo excesso de passageiros no elevador. Por isso, a SBC decidiu fiscalizar com mais rigor o uso de seus elevadores: foi instalado um sensor em cada porta que detecta a quantidade de pessoas que saem e entram em cada andar do elevador. A SBC tem os registros do sensor de todo um dia de funcionamento do elevador (que sempre comea vazio). Eles sabem que as pessoas sao educadas e sempre deixam todos os passageiros que irao sair em um andar sarem antes de outros passageiros entrarem no elevador, mas ainda assim eles tem tido dificuldade em decidir se a capacidade mxima do elevador foi excedida ou nao.

Tarefa
Escreva um programa que, dada uma sequencia de leituras do sensor e a capacidade mxima do elevador, determina se a capacidade mxima do elevador foi excedida em algum momento.

Entrada
A primeira linha da entrada contm dois inteiros N e C, indicando o nmero de leituras realizadas pelo sensor e a capacidade mxima do elevador, respectivamente (1 N 1000 e 1 C 1000). As N linhas seguintes contem, cada uma, uma leitura do sensor. Cada uma dessas linhas contm dois inteiros S e E, indicando quantas pessoas saram e quantas pessoas entraram naquele andar, respectivamente (0 S 1000 e 0 E 1000)

Sada
Seu programa deve imprimir uma nica linha contendo o caractere S, caso a capacidade do elevador tenha sido excedida em algum momento, ou o caractere N caso contrrio.

Exemplo
Entrada 5 10 0 5 2 7 3 3 5 2 7 0

Sada N Entrada 5 10 0 3 0 5 0 2 3 4 6 4 Sada S Entrada 6 4 0 5 3 5 4 5 1 0 1 1 1 1 Sada S

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 1 nvel 2

SPOJ Problem Set (obi)

8779. Reuniao
Problem code: REUNIAO2
Todos os anos, a SBC (Sociedade Brasileira de Caminhoneiros) rene seus membros em alguma cidade para discutir sobre a profissao. Nessas reunioes sao discutidos os problemas da categoria e sao apresentadas sugestoes sobre como melhorar as condioes de trabalho. O grande problema desse tipo de encontro que os membros estao espalhados pelo pas, uma vez que a profissao exige que eles viajem para diversos lugares todos os dias. Por isso, a escolha da cidade onde ser feita a reuniao sempre feita de modo que nao prejudique demais nenhum dos caminhoneiros. O critrio para tal que a maior das distncias percorridas pelos caminhoneiros para chegar ao local da reuniao deve ser a menor possvel. Ou seja, a distncia percorrida pelo caminhoneiro que vai percorrer a maior distncia entre todos os caminhoneiros para chegar a reuniao deve ser a menor possvel.

Tarefa
Dadas as cidades onde se encontram os caminhoneiros e a descriao das estradas que interligam essas cidades, escreva um programa que determina qual ser a menor distncia mxima percorrida por um caminhoneiro para chegar at o local da reuniao. Os caminhoneiros conhecem bem as estradas, e portando sempre fazem o menor caminho possvel at a cidade da reuniao. Sempre existe um caminho ligando quaisquer duas cidades.

Entrada
A primeira linha da entrada possui dois nmeros inteiros N (2 N 100) e M (N - 1 M 10000), que representam, respectivamente, o nmero de cidades e o nmero de estradas que as interligam. As cidades sao identificadas por nmeros inteiros entre 0 e N - 1. As prximas M linhas da entrada possuem, cada uma, a descriao de uma estrada. Cada descriao de entrada composta por tres nmeros inteiros: U, V e W, onde U e V representam cidades (0 U N - 1 e 0 V N - 1) e W representa o comprimento da estrada que une essas duas cidades (todas as estradas sao mao dupla, 1 W 100). sempre possvel viajar entre qualquer duas cidades com as estradas existentes, mas pode haver mais de uma estrada ligando o mesmo par de cidades .

Sada
Seu programa deve imprimir uma nica linha contendo um nmero inteiro, a distncia mxima percorrida por um caminhoneiro para ir at a reuniao, obedecidas as restrioes estabelecidas (ou seja, essa distncia mxima deve ser a menor possvel).

Exemplo
Entrada 4 4 0 1 2 0 2 4 1 3 1 2 3 5 Sada 4 Entrada 4 5 0 1 2 0 2 4 1 3 1 2 3 5 3 2 2 Sada 3 Entrada 7 12 0 1 22 0 2 30 0 5 35 1 5 11 1 6 30 1 2 25 2 3 15 2 6 10 3 4 15 3 5 10 4 5 20 5 6 33 Sada 30

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

8780. Altas aventuras


Problem code: ALTAS2
Incentivado por um filme de animaao recente, vov resolveu realizar seu sonho de criana fazendo sua pequena casa voar amarrada a baloes de hlio. Comprou alguns baloes coloridos de boa qualidade, para fazer alguns testes, e comeou a planejar a grande aventura. A primeira tarefa determinar qual a quantidade de hlio mxima que pode ser injetada em cada balao de maneira que ele nao estoure. Suponha que os valores possveis de quantidade de hlio em cada balao variem entre os valores 1 e N . Claro que vov poderia testar todas as possibilidades, mas esse tipo de soluao ineficiente nao apropriada, ainda mais considerando que vov comprou apenas K baloes para os testes. Por exemplo, suponha que N = 5 e K = 2. Nesse caso, a melhor soluao seria testar primeiro em 3. Caso o balao estoure, vov s teria mais um balao, entao teria de testar 1 e 2 no pior caso, somando ao todo 3 testes. Caso o balao nao estoure, vov poderia testar 4 e depois 5 (ou 5 e depois 4), tambm somando 3 ao todo.

Tarefa
Dados a capacidade mxima da bomba e o nmero de baloes, indicar o nmero mnimo de testes que devem ser feitos, no pior caso, para determinar o ponto em que um balao estoura.

Entrada
A nica linha da entrada contm dois inteiros, N e K, separados por espao em branco (1 <= K <= N <= 1.000.000.000).

Sada
Seu programa deve imprimir uma nica linha, contendo um inteiro que representa o nmero mnimo de testes que devem ser feitos no pior caso para determinar o ponto em que o balao estoura.

Exemplo
Entrada 5 2 Sada 3 Entrada

20 2 Sada 6 Entrada 11 5 Sada 4

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2010 - fase 2 nvel 2

SPOJ Problem Set (obi)

8781. Floresta
Problem code: FLOREST2
O desmatamento um dos maiores problemas enfrentados pelo Brasil hoje; estima-se que mais de 10 mil km^2 de vegetaao sejam desflorestados todo ano. Alm de destruir os habitats de vrias espcies em risco de extinao, o desmatamento promove a emissao de gs carbnico, principal responsvel pelo efeito estufa e pelo aquecimento global. A Fundaao de Conservaao dos Carvalhos (FCC) tenta combater esta tendencia, promovendo o reflorestamento das regioes desmatadas. Para isso, eles pretendem plantar carvalhos formando um quadriculado (um carvalho em cada vrtice); no centro de cada quadrado formado por eles, a FCC tambm plantar um eucalipto. Para preservar a biodiversidade da rea plantada, pelo menos uma rvore de cada espcie deve ser plantada durante o reflorestamento. Por exemplo, se a FCC quiser plantar 23 rvores, ela poder faze-lo de duas maneiras: ou formando um retngulo 3 5 com os carvalhos, como na figura (a), ou formando um retngulo 2 8, como na figura (b).

Considere que, para os propsitos deste problema, um retngulo x y equivalente a um retngulo y x.

Tarefa
Escreva um programa que, dado o nmero total de rvores que devem ser plantadas, de quantas maneiras diferentes elas podem ser dispostas.

Entrada
A nica linha da entrada contm um nico inteiro N, que indica o nmero total de rvores que devem ser plantadas (1 <= N <= 10 9 ) .

Sada
Seu programa deve imprimir uma nica linha, contendo um nico inteiro, indicando o nmero de arranjos distintos que podem ser feitos para o reflorestamento.

Exemplo
Entrada 23 Sada 2 Entrada 7 Sada 0 Entrada 53 Sada 3

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

8782. Matrizes
Problem code: MATRIZ2
O conglomerado indiano Tutu um conjunto de empresas que atua nos mais diversos ramos da indstria, produzindo desde sapatos at avioes e foguetes. Por ser tao diversificada, precisa de grandes e rpidos sistemas para clculos de contabilidade. Um dos mdulos mais importantes desse sistema o de fornecimento de produtos, onde fica a base de dados de produtos e fornecedores. Um mesmo produto pode ser fornecido por vrios fornecedores diferentes. A outra grande matriz a B, onde cada linha representa um dia do mes e cada coluna um produto. O valor da matriz na linha m e coluna n representa a quantidade do produto n a ser adquirido no dia m. Tal empresa tem uma poltica de fidelidade com seus fornecedores, e uma das prticas efetuadas pela empresa , em um determinado dia, comprar todos os produtos necessrios de um nico fornecedor. Isto , em um dia todos os produtos adquiridos serao comprados do fornecedor x, no outro dia do fornecedor y, e assim por diante Para auxiliar a escolha de qual fornecedor ser o escolhido no dia, foi gerada outra matriz C, que o resultado da multiplicaao das matrizes A B. Essa matriz diz o quanto ser gasto pela empresa se adquirir todos os produtos de um determinado fornecedor em um determinado dia. As matrizes A e B sao quadradas (o nmero de linhas igual ao nmero de colunas) e tem valores definidos pelas frmulas A ij = ( P i + Q j) (mod X) B ij = ( R i + S j) (mod Y) onde i o ndice da linha da matriz e j o ndice da coluna da matriz (todos os ndices vao de 1 at N). Os inteiros P, Q, R, S, X e Y sao parmetros constantes, que definem as duas matrizes A e B.

Tarefa
Escreva um programa que, dados os parmetros das matrizes A e B, e a posiao de uma das entradas as matriz C, calcula o valor daquela entrada.

Entrada
A primeira linha da entrada contm um inteiro N, indicando as dimensoes das matrizes A, B e C (2 <= N <= 10 5 ). A linha seguinte contm seis inteiros P , Q, R, S, X e Y , indicando os parmetros das matrizes A e B (2 <= X, Y <= 10 4 ; 0 <= P, Q < X; 0 <= R, S < Y ). Finalmente, a ltima linha da entrada contm dois inteiros I e J, indicando a linha e a coluna da matriz C a serem consultados (1 <= I, J <= N>).

Sada
Seu programa deve imprimir uma nica linha contendo o valor da matriz C na linha e coluna especicadas.

Exemplo
Entrada 3 4 3 2 3 5 6 2 2 Sada 18 Entrada 4 3 5 1 0 6 7 4 3 Sada 30 Entrada 2 2 2 0 1 3 2 2 1 Sada 2

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2010 - fase 2 n-vel 2

SPOJ Problem Set (obi)

8783. Telescpio
Problem code: TELESCO2
Telescpios sao instrumentos que auxiliam a observaao do cu, melhorando e aumentando o aspecto das estrelas, planetas e outros objetos brilhantes. Existem diversos tipos de telescpios, sendo os tipos mais comuns os de lentes objetivas (refratores) e os de espelhos (refletores). A maneira como os telescpios melhoram a nossa percepao dos astros no cu aumentando a quantidade de luz captada que chega aos nossos olhos. Toda luz que entra pelos nossos olhos entra por um orifcio chamado pupila. Tal controla a quantidade de luz que entra nos olhos, aumentando o dimetro quando o ambiente est escuro (e portanto precisamos obter mais luz para identificar os objetos) e diminuindo quando o ambiente est claro. Num ambiente muito escuro, a pupila pode atingir um dimetro de 8 mm. Cada objeto celeste (estrela, planeta, nebulosa, etc) emite uma quantidade de luz (ftons) que homogeneamente distribuda quando chega na Terra. Por exemplo, a estrela A emite luz que pode ser captada a um fluxo de 40.000 ftons por segundo por milmetro quadrado. Isso , a cada segundo, possvel captar 40.000 ftons provenientes da estrela A numa rea de 1 mm. Ou seja, uma pupila de 10 mm de rea captaria 400.000 ftons provenientes da estrela A por segundo. Para que nosso crebro consiga interpretar que existe um objeto ali, porm, ele precisa receber 40.000.000 ftons por segundo. Assim, podemos utilizar um telescpio com lente (ou espelho) de 100 mm de rea, que vai captar a quantidade necessria de ftons provenientes da estrela A e encaminh-los at nossa pupila, fazendo assim com que nosso crebro perceba a presena da estrela ali.

Tarefa
Dada uma lista com estrelas no cu, o fluxo de ftons que cada uma delas emite, e rea de abertura de um telescpio, dizer quantas estrelas serao perceptveis usando tal telescpio.

Entrada
A primeira linha da entrada ter um inteiro A (1 A 10.000) representando a rea de abertura do telescpio (em milmetros quadrados) a ser considerado. A segunda linha possui um inteiro N (1 N 10.000) representando o nmero de estrelas a serem estudadas. As N linhas seguintes terao, cada uma, um inteiro F (1 F 20.000) representando o fluxo de ftons que cada uma das N estrelas emitem (em ftons por segundo por milmetro quadrado).

Sada
Imprima um inteiro representando a quantidade de estrelas que serao percebidas ao se utilizar o telescpio em questao.

Exemplo
Entrada 10000 3 4000 3500 5100

Sada 2 Entrada 5869 3 3975 14234 8569 Sada 2 Entrada 2967 9 18650 16338 2400 17702 14619 13934 7979 16316 1053 Sada 6

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 2 nvel 2

SPOJ Problem Set (obi)

8784. Tradutor aliengena


Problem code: TRADUTO2
de conhecimento pblico e notrio que j fomos visitados por aliengenas diversas vezes. A grande dificuldade que temos, porm, a comunicaao com eles, por causa de grandes diferenas entre as lnguas. Alm disso, assim como ns, eles tambm tem vrias lnguas diferentes. Com o intuito de auxiliar no processo de traduao, foi criado um mtodo de mapeamento dos smbolos do alfabeto de cada lngua aliengena, atribuindo um nmero inteiro para cada smbolo. Sendo assim, para um alfabeto aliengena com N elementos, atribui-se nmeros de 1 a N a cada um. O problema que o encarregado de transcrever os textos aliengenas para nmeros nao foi muito cuidadoso e usou o mesmo espaamento entre dgitos e nmeros. Assim, por exemplo, digamos que para um alfabeto com 32 smbolos, uma sequencia que deveria ser "31 20 4 19" virou "3120419". Como se pode notar, h diferentes maneiras vlidas de interpretar essa sequencia alm da original, como por exemplo "3 1 20 4 19" e "31 20 4 1 9". Repare que a transcriao nunca usa zeros a esquerda de um nmero e, portanto, a sequencia "3 12 04 19" invlida, assim como "31 20 41 9" por conter um nmero (41) que nao corresponde a um smbolo.

Tarefa
Dados a quantidade de smbolos do alfabeto e uma sequencia transcrita, determine quantas sequencias vlidas podem ser formadas

Entrada
A entrada composta por duas linhas. A primeira contm um nmero inteiro N (1 < N < 10 100 ) que indica a quantidade de smbolos do alfabeto. A segunda linha contm uma cadeia de dgitos de tamanho mnimo 1 e tamanho mximo 100.000 que corresponde a sequencia transcrita. .

Sada
Seu programa deve imprimir uma linha com o resto da divisao da quantidade de sequencias vlidas por 1.000.000.007.

Exemplo
Entrada 323120419 Sada 4 Entrada 324021333251231253

Sada 0 Entrada 50012345 Sada 13

Added by: Wanderley Guimares Date: 2011-04-28 Time limit: 1s Source limit:50000B Languages: All except: CLOJ ERL F# GO JS PERL 6 PYTH 3.1.2 SCALA TCL Resource: OBI 2010 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

10864. Campo minado


Problem code: MINADO12
Leonardo Viana um garoto fascinado por jogos de tabuleiro. Nas frias de janeiro, ele aprendeu um jogochamado "Campo minado", que jogado em um tabuleiro com N clulas dispostas na horizontal. O objetivodesse jogo determinar, para cada clula do tabuleiro, o nmero de minas explosivas nos arredores da mesma(que sao a prpria clula e as clulas imediatamente vizinhas a direita e a esquerda, caso essas existam). Porexemplo, a figura abaixo ilustra uma possvel configuraao de um tabuleiro com 5 clulas:

A primeira clula nao possui nenhuma mina explosiva, mas vizinha de uma clula que possui uma minaexplosiva. Nos arredores da segunda clula temos duas minas, e o mesmo acontece para a terceira e quartaclulas; a quinta clula s tem uma mina explosiva em seus arredores. A prxima figura ilustra a resposta para esse caso.

Leonardo sabe que voce participa da OBI e resolveu lhe pedir para escrever um programa de computador que,dado um tabuleiro, imprima o nmero de minas na vizinhana de cada posiao. Assim, ele poder conferir as centenas de tabuleiros que resolveu durante as frias.

Entrada
A primeira linha da entrada contm um inteiro N indicando o nmero de clulas no tabuleiro. O tabuleiro dado nas prximas N linhas. A i-sima linha seguinte contm 0 se nao existe mina na i-sima clula do tabuleiro e 1 se existe uma mina na i-sima clula do tabuleiro.

Sada
A sada composta por N linhas. A i-sima linha da sada contm o nmero de minas explosivas nos arredores da i-sima clula do tabuleiro.

Restrioes
1 <= N <= 50

Exemplos
Entrada 5 0 1 1 0 1 Sada 1 2 2 2 1 Entrada 5 0 1 1 10Sada 1 2 3 21

Added by: Wanderley Guimares Date: 2012-02-29 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel junior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

10865. Corrida
Problem code: CORRID11
A escola de Joaozinho tradicionalmente organiza uma corrida ao redor do prdio. Como todos os alunos sao convidados a participar e eles estudam em perodos diferentes, difcil que todos corram ao mesmo tempo. Para contornar esse problema, os professores cronometram o tempo que cada aluno demora para dar cada volta ao redor da escola, e depois comparam os tempos para descobrir a classificaao final. Sua tarefa , sabendo o nmero de competidores, o nmero de voltas de que consistiu a corrida e os tempos de cada aluno competidor, descobrir quem foi o aluno vencedor, para que ele possa receber uma medalha comemorativa.

Entrada
A primeira linha da entrada contm dois inteiros N e M representando o nmero de competidores e o nmero de voltas da corrida, respectivamente. Cada uma das N linhas seguintes representa um competidor: a primeira linha representa o primeiro competidor, a segunda linha representa o segundo competidor, e assim por diante. Cada linha contm M inteiros representando os tempos em cada volta da corrida: o primeiro inteiro o tempo da primeira volta, o segundo inteiro o tempo da segunda volta, e assim por diante. Garante-se que nao houve dois competidores que gastaram o mesmo tempo para completar a corrida inteira.

Sada
A sada consiste de um nico inteiro, que corresponde ao nmero do competidor que ganhou a corrida.

Restrioes
2 <= N <= 100 1 <= M <= 100 1 <= qualquer nmero da entrada que represente o tempo de uma volta <= 10 6

Exemplos
Entrada 2 1 5 7 Sada 1 Entrada 3 3 3 5 6 1 2 3 1 1 1 Sada 3

Neste exemplo, existem tres competidores numa corrida de tres voltas. Os tempos de cada competidor em cada volta foram como na tabela a seguir.

Sendo assim, o vencedor foi o competidor 3 (com um tempo total de 3). Added by: Wanderley Guimares Date: 2012-02-29 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel junior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

10866. Transporte
Problem code: TRANSP11
A Betalndia um pas que apenas recentemente se abriu para o comrcio exterior e est preparando agora sua primeira grande exportaao. A Sociedade Betalandesa de Comrcio (SBC) ficou encarregada de conduzir a exportaao e determinou que, seguindo os padroes internacionais, a carga ser transportada em conteineres, que sao, por sua vez, colocados em grandes navios para o transporte internacional. Todos os conteineres betalandeses sao identicos, medindo A metros de largura, B metros de comprimento e C metros de altura. Um navio porta-conteineres pode ser visto como um retngulo horizontal de X metros de largura e Y metros de comprimento, sobre o qual os conteineres sao colocados. Nenhuma parte de conteiner pode ficar para fora do navio. Alm disso, para possibilitar a travessia de pontes, a altura mxima da carga no navio nao pode ultrapassar Z metros.

Devido a limitaoes do guindaste utilizado, os conteineres s podem ser carregados alinhados com o navio. Ou seja, os conteineres s podem ser colocados sobre o navio de tal forma que a largura e o comprimento do conteiner estejam paralelos a largura e ao comprimento do navio, respectivamente. A SBC est com problemas para saber qual a quantidade mxima de conteineres que podem ser colocados no navio e pede sua ajuda. Sua tarefa, neste problema, determinar quantos conteineres podem ser carregados no navio respeitando as restrioes acima.

Entrada
A entrada consiste de duas linhas. A primeira linha contm tres inteiros A, B e C que representam as dimensoes dos conteineres, enquanto a segunda linha contm outros tres inteiros X, Y e Z que representam as dimensoes do navio.

Sada
Seu programa deve imprimir apenas uma linha contendo um inteiro que indica a quantidade mxima de conteineres que o navio consegue transportar.

Restrioes
1 <= A, B, C, X, Y, Z <= 10 6 garantido que a maior resposta ser menor ou igual a 10 6

Exemplos
Entrada 1 1 1 1 1 1 Sada 1 Entrada 1 2 5 9 6 11 Sada 54 Entrada 1 2 12 6 9 10 Sada 0

Added by: Wanderley Guimares Date: 2012-02-29 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel junior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

10867. Calculadora
Problem code: CALCUL11
Solicitando Boas Contas (SBC) uma organizaao de inspeao de calculadoras. Todos os fabricantes procuram ter o selo de qualidade da SBC, que faz com que os clientes comprem o produto sem preocupaao com contas erradas. Voce est encarregado de testar mquinas que fazem apenas operaoes de multiplicaao e divisao. Alm disso, o termo a ser digitado em cada operaao (que dividir ou multiplicar o nmero atualmente exibido no visor) s pode conter um nico dgito. A calculadora exibe o nmero 1 quando ligada. Depois disso, o usurio pode digitar um nmero com um nico dgito e escolher se esse nmero deve multiplicar ou dividir o nmero exibido anteriormente; o resultado da operaao escolhida entao exibido na calculadora. Pode-se repetir esse processo indefinidamente. Apesar de s podermos entrar com nmeros inteiros de um dgito, o visor da calculadora permite exibir nmeros com mltiplos dgitos e at mesmo nmeros fracionrios. Dada uma sequencia de operaoes que foram realizadas nessa calculadora logo depois de ligada, sua tarefa conferir o resultado exibido.

Entrada
A primeira e nica linha da entrada contm um inteiro N. Cada uma das prximas N linhas contm um dgito e um caractere * ou /, que representam uma operaao realizada na calculadora.

Sada
Seu programa deve imprimir uma nica linha contendo o resultado que deve ser exibido pela calculadora ao final das operaoes.

Restrioes
1 <= N <= 100 000. Os nmeros informados sao inteiros entre 1 e 9. O resultado final da conta um nmero inteiro entre 1 e 2 30 .

Exemplos
Entrada 3 2 * 1 * 3 * Sada 6

O usurio deseja calcular o resultado da seguinte expressao: 1 2 1 3. Note que a primeira ocorrencia do nmero 1 vem do fato da calculadora mostrar inicialmente 1 ao invs de 0.
Entrada 3 2 / 3 / 6 * Sada 1

Neste exemplo, o usurio deseja calcular o resultado da seguinte expressao: ((1/2)/3) 6.


Entrada 11 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 / Sada 387420489

Added by: Wanderley Guimares Date: 2012-02-29 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel junior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

10868. Chuva
Problem code: CHUVA11
Bob trabalha no OBM (rgao Brasileiro de Metereologia), que a organizaao responsvel pela mediao dos ndices pluviomtricos (quantidade de chuva acumulada) em todo o pas. Eles sao muito eficientes no que fazem, mas estao com um problema: eles nao sabem como proceder para calcular a quantidade acumulada de chuva que caiu em cada regiao em dois perodos consecutivos, muito embora eles saibam os dados de cada perodo separadamente. Como a chefia do rgao estava muito ocupada, acabou ficando a cargo de Bob, o estagirio, a tarefa de implementar um programa que some, para cada regiao, a quantidade de chuva acumulada em dois perodos consecutivos. O mapa que o OBM usa dividido em NN regioes, sendo que para cada regiao, a cada perodo, determinado um nmero inteiro indicando a quantidade de chuva acumulada. A quantidade de chuva acumulada total em cada regiao em dois perodos consecutivos a soma das quantidades de chuva em cada um dos perodos. Mas como Bob s um estagirio e nao est acostumado a fazer nada mais do que tirar cpias de documentos, ele pediu sua ajuda para implementar o programa que calcula a quantidade de chuva acumulada total nos dois perodos para cada uma das regioes, dadas as quantidades de chuva acumulada em cada perodo para cadaregiao.

Entrada
A primeira linha da entrada contm um inteiro N indicando a dimensao dos dois mapas que devem ser lidos. Nas prximas 2N linhas sao dados os dois mapas, cada mapa indicando a quantidade de chuva acumulada nas regioes em um perodo. Cada mapa descrito em N linhas consecutivas, cada linha contendo N inteiros, sendo que cada inteiro indica a quantidade de chuva acumulada, no perodo, em uma regiao.

Sada
A sada dever conter N linhas, com N inteiros em cada linha, indicando a quantidade de chuva acumulada total em cada uma das regioes nos dois perodos considerados.

Restrioes
1 <= N <= 100. 0 <= quantidade de chuva acumulada em cada regiao de cada mapa <= 100.

Exemplos
Entrada 2 1 2 3 4 10 11 12 13 Sada 11 13 15 17 Entrada 3 1 1 1 1 2 2 1 2 3 3 2 1 2 2 1 1 1 1 Sada 4 3 2 3 4 3 2 3 4

Added by: Wanderley Guimares Date: 2012-02-29 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel junior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

10869. Gincana
Problem code: GINCAN11
Toda semana Juquinha tem aulas de ACM (Artes Cenicas e Musicais) no colgio em que estuda e, recentemente, sua professora anunciou que haver uma gincana no final do semestre. No entanto, os times devem ser formados o mais breve possvel para que os alunos possam ensaiar. Cada time constitudo de um ou mais alunos, e cada aluno tem que pertencer a exatamente um time. Alm disso, os times nao podem ser formados de qualquer maneira: se um aluno amigo de outro, esses alunos devem estar no mesmo time. A professora entao pediu para que os alunos a informassem das relaoes de amizade na sala de aula. Os alunos entao se numeraram de 1 at N e escreveram uma lista cujas linhas contm pares de nmeros. Se dois alunos cujos nmeros sao i e j sao amigos, haver ao menos uma linha contendo i e j ou j e i na lista. Inversamente, se h uma linha contendo i e j na lista, entao os alunos cujos nmeros sao i e j sao amigos. A professora entao recolheu a lista e, na prxima aula, dever decidir que times formar. Ela est pensando em formar o maior nmero possvel de times e gostaria de saber quantos times ela formaria. Ajude entao a professora escrevendo um programa que, dada a lista de amizades, determina qual o maior nmero de times que ela pode formar.

Entrada
A primeira linha da entrada contm dois inteiros N e M que representam, respectivamente, o nmero de alunos na turma e o nmero de linhas na lista. As prximas M linhas contem a lista de amizades. Cada linha contm dois inteiros I e J separados por exatamente um espao.

Sada
Seu programa deve imprimir uma linha contendo o nmero mximo de times que podem ser formados pela professora.

Restrioes
1 <= N <= 1000. 0 <= M <= 5000. 1 <= I, J <= N.

Exemplos
Entrada 3 1 1 3 Sada 2 Entrada 7 6 1 6 6 4 5 2 3 7 2 3 7 2 Sada 2

Added by: Wanderley Guimares Date: 2012-02-29 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel junior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11001. Corrida
Problem code: CORR11
Todo ano, os habitantes da Mlognia, apesar das crises internas, renem-se em torno de um esporte que a paixao nacional: as corridas de carros. A Grande Corrida anual um enorme evento organizado pela Associaao de Corridas da Mlognia (ACM), sendo amplamente televisionado e reportado em jornais e revistas de todo o pas. Os resultados da corrida sao tema principal das rodas de conversa por semanas. Por bastante tempo, os resultados da Grande Corrida eram compilados manualmente. Observadores especializados iam a pista medir o tempo de cada um dos N carros, numerados de 1 a N, em cada uma das M voltas, anotando entao os resultados em tabelas para posterior anlise por parte das equipes e dos jornalistas. Muitos erros eram introduzidos nesse processo, e a organizaao decidiu informatizar todo o sistema. A ACM percebeu que o esforo necessrio para a construao do sistema seria grande, e optou por contar com a ajuda de uma equipe de programadores. Percival foi contratado para escrever a parte do software que determina quais foram os carros vencedores, mas est com dificuldades e pede sua ajuda. A sua tarefa, neste problema, determinar os tres carros melhor colocados, fornecidos os tempos que cada carro levou para completar cada volta da corrida.

Entrada
A primeira linha da entrada contm dois inteiros N e M representando o nmero de carros e o nmero de voltas da corrida, respectivamente. Cada uma das N linhas seguintes representa um carro: a primeira linha representa o primeiro carro, a segunda linha representa o segundo carro, e assim por diante. Cada linha contm M inteiros representando os tempos em cada volta da corrida: o primeiro inteiro o tempo da primeira volta, o segundo inteiro o tempo da segunda volta, e assim por diante. Garante-se que nao houve dois carros que gastaram o mesmo tempo para completar a corrida inteira.

Sada
A sada consiste de tres linhas, contendo um nico inteiro cada. A primeira linha contm o nmero do carro que ganhou a corrida, a segunda contm o nmero do segundo colocado e a terceira contm o nmero do terceiro colocado.

Restrioes
3 <= N <= 100 1 <= M <= 100 1 <= qualquer nmero da entrada que represente o tempo de uma volta <= 10 6

Exemplos
Entrada 3 1 1 2 3 Sada 1 2 3 Entrada 5 2 3 7 2 5 1 1 15 2 2 2 Sada 3 5 2

Neste exemplo, existem 5 carros numa corrida de duas voltas. Os tempos de cada carro em cada volta foram como na tabela a seguir.

Sendo assim, o vencedor foi o carro 3 (com um tempo total de 2), seguido pelo carro 5 (com um tempo total de 4) e pelo carro 2 (com um tempo total de 7). Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - Fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11002. Progressoes aritmticas


Problem code: PAS11
Bob um aluno do ensino mdio que gosta muito de matemtica. Na ltima aula ele aprendeu o que sao Progressoes Aritmticas (PAs) e ficou fascinado por elas. Pelo que Bob entendeu, Progressoes Aritmticas sao sequencias de nmeros nas quais a diferena entre dois elementos consecutivos sempre igual a uma constante r, chamada de razao da PA. Um exemplo de Progressao Aritmtica de razao 2 -1, 1, 3, 5. Alm disso, toda sequencia com um ou dois elementos sempre uma Progressao Aritmtica. Por outro lado, 5, 6, 8, 9, 10 nao uma PA porque a diferena entre elementos consecutivos nao constante: a diferena entre os dois primeiros elementos 6-5 = 1, enquanto a diferena entre o terceiro e o segundo elementos 8-6 = 2. Bob percebeu que qualquer sequencia, mesmo que a mesma nao seja uma Progressao Aritmtica, pode ser quebrada em sequencias menores que sao PAs. Por exemplo, vimos que a sequencia 5, 6, 8, 9, 10 nao uma PA, mas podemos quebrar ela entre o 6 e o 8 para obtermos as sequencias 5, 6 e 8, 9, 10, que sao PAs. Note que nao existe como quebrar a sequencia em menos partes se quisermos ter apenas PAs no fim do procedimento. Bob fascinado por programaao mas ainda nao sabe programar muito bem, e por isso pediu sua ajuda: ele nao est conseguindo descobrir como quebrar sequencias muito grandes de um jeito eficiente; por isso, pediu que voce escrevesse um programa para, dada uma sequencia qualquer, imprimir o nmero mnimo de partes em que precisamos quebrar a sequencia para termos apenas Progressoes Aritmticas no trmino do processo. Caso a sequencia original j seja uma PA, podemos terminar o processo com uma nica parte, e portanto a resposta para esse caso 1.

Entrada
A primeira linha da entrada composta por um inteiro N, o nmero de elementos da sequencia. Na segunda linha existem N inteiros a i , os elementos da sequencia.

Sada
A sada deve conter uma nica linha, indicando o nmero mnimo de partes em que Bob precisa quebrar a sequencia original para que ele termine apenas com PAs.

Restrioes
1 <= N <= 10 5 -10 5 <= a i <= 10 5

Exemplos
Entrada 5 1 2 3 4 5 Sada 1 Entrada 7 -2 0 2 3 3 4 6 Sada 3

fcil verificar que a sequencia -2, 0, 2, 3, 3, 4, 6 (do exemplo acima) nao uma PA, pois 2-0 != 3-2. Verificando manualmente, voce pode constatar que nao possvel particionar a sequencia em duas de tal forma que ambas as partes sejam PAs. Entretanto, existe uma maneira de particionar a sequencia em 3 PAs: [-2, 0, 2] [3, 3] [4, 6]. Portanto, temos que a resposta para este exemplo 3.
Entrada 4 -2 0 3 6 Sada 2

A sequencia -2, 0, 3, 6 (do exemplo acima) pode ser particionada de vrias formas. As nicas maneiras que resultam em PAs sao as seguintes: Com 4 partes temos 1 possibilidade: [-2] [0] [3] [6] Com 3 partes temos 3 possibilidades: [-2, 0] [3] [6] [-2] [0, 3] [6] [-2] [0] [3, 6] Com 2 partes temos 2 possibilidades: [-2, 0] [3, 6] [-2] [0, 3, 6]

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11003. Pulo do sapo


Problem code: PUSAPO11
Sebastiao Bueno Coelho, apelidado de SBC pelos familiares e amigos, passou as frias de janeiro de 2011 no stio de seus avs. Durante sua estadia, uma das atividades prediletas do SBC era nadar no rio que havia no fundo da casa onde morava. Uma das caractersticas do rio que mais impressionava SBC era um belo caminho, feito inteiramente com pedras brancas. H muito tempo, o av de SBC notara que os habitantes do stio atravessavam o rio com grande frequencia e, por isso, construiu um caminho no rio com pedras posicionadas em linha reta; ao faze-lo, tomou muito cuidado para que o espaamento das pedras fosse de exatamente um metro. Hoje em dia, a nica utilidade do caminho servir de diversao para os sapos que vivem no rio, que pulam de uma pedra a outra agitadamente. Um certo dia, enquanto descansava e nadava nas guas, SBC assistiu atentamente as acrobacias dos bichos e notou que cada sapo sempre pulava (zero, uma ou mais vezes) uma quantidade fixa de metros. SBC sabe que voce participa da OBI todos os anos e, chegando na escola, resolveu desafiar-te com o seguinte problema: Dado o nmero de pedras no rio, o nmero de sapos, a pedra inicial sobre a qual cada sapo est (cada pedra identificada por sua posiao na sequencia de pedras) e a distncia que cada sapo pula, determinar as posioes onde pode existir um sapo depois que SBC chega no rio.

Entrada
A primeira linha da entrada contm dois inteiros N e M representando o nmero de pedras no rio e o nmero de sapos, respectivamente. Cada uma das M linhas seguintes possui dois inteiros P e D representando a posiao inicial de um sapo e a distncia fixa de pulo, respectivamente.

Sada
A sada contm N linhas. A i-sima linha indica a possibilidade ou nao de ter um sapo na i-sima pedra. Para as pedras que podem ter um sapo voce deve imprimir 1, e para as pedras que com certeza nao podem ter nenhum sapo voce deve imprimir 0.

Restrioes
1 <= N, M <= 100 Para cada sapo, 1 <= P, D <= N

Exemplos
Entrada 5 2 3 2 4 4 Sada 1 0 1 1 1

Neste exemplo, SBC indicou a existencia de 5 pedras no rio e 2 sapos. Os sapos estavam inicialmente nas pedras 3 e 4. SBC tambm lhe disse que o primeiro sapo da entrada sempre pula 2 metros, e o segundo sempre pula 4 metros. A figura a seguir ilustra as possveis pedras que podem ser ocupadas pelos sapos quando eles comeam a pular.

Entrada 8 3 3 3 2 2 6 2 Sada 0 1 1 1 0 1 0 1

Neste exemplo, SBC indicou a existencia de 8 pedras no rio e 3 sapos. Os sapos estavam inicialmente nas pedras 3, 2 e 6. SBC tambm lhe disse que o primeiro sapo da entrada sempre pula 3 metros, o segundo e terceiro sempre pulam 2 metros. Dessa forma, o primeiro sapo pode estar nas pedras 3 ou 6; o segundo sapo pode estar nas pedras 2, 4, 6 ou 8; e o terceiro sapo pode estar nas pedras 6, 4, 2 e 8. A figura a seguir ilustra as possveis pedras que podem ser ocupadas pelos sapos quando eles comeam a pular.

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11004. Tringulos
Problem code: TRIANG11
Caio estava brincando de construir tringulos com palitos de diferentes tamanhos. Ele fazia isso juntando aspontas de tres palitos sobre uma mesa. Ele notou que podia agrupar os tringulos formados em tres grupos: Tringulos acutngulos, que sao aqueles em que todos os ngulos internos medem menos de 90; Tringulos retngulos, que sao aqueles que possuem um ngulo interno que mede exatamente 90; Tringulos obtusngulos, que sao aqueles que possuem um ngulo interno que mede mais de 90. Ele tambm percebeu que nem sempre possvel formar um tringulo com tres palitos.

Sua tarefa , dados os comprimentos A, B e C de tres palitos, dizer se possvel formar um tringulo com esses palitos e, em caso afirmativo, dizer a qual grupo o tringulo formado pertence.

Entrada
A entrada consiste de uma nica linha, contendo tres inteiros A, B e C separados por espao.

Sada
Imprima uma linha contendo apenas uma letra minscula: n se nao for possvel formar um tringulo; a se o tringulo formado for acutngulo; r se o tringulo formado for retngulo;

o se o tringulo formado for obtusngulo.

Restrioes
1 <= A <= 10 4 1 <= B <= 10 4 1 <= C <= 10 4

Exemplos
Entrada 1 1 1 Sada a Entrada 1 2 1 Sada n Entrada 5 4 3 Sada r Entrada 6 3 4 Sada o

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11005. Calculadora
Problem code: CALCU11
Solicitando Boas Contas (SBC) uma organizaao de inspeao de calculadoras. Todos os fabricantes procuram ter o selo de qualidade da SBC, que faz com que os clientes comprem o produto sem preocupaao com contas erradas. Voce est encarregado de testar mquinas que fazem apenas operaoes de multiplicaao e divisao. Alm disso, o termo a ser digitado em cada operaao (que dividir ou multiplicar o nmero atualmente exibido no visor) s pode conter um nico dgito. A calculadora exibe o nmero 1 quando ligada. Depois disso, o usurio pode digitar um nmero com um nico dgito e escolher se esse nmero deve multiplicar ou dividir o nmero exibido anteriormente; o resultado da operaao escolhida entao exibido na calculadora. Pode-se repetir esse processo indefinidamente. Apesar de s podermos entrar com nmeros inteiros de um dgito, o visor da calculadora permite exibir nmeros com mltiplos dgitos e at mesmo nmeros fracionrios. Dada uma sequencia de operaoes que foram realizadas nessa calculadora logo depois de ligada, sua tarefa conferir o resultado exibido.

Entrada
A primeira e nica linha da entrada contm um inteiro N. Cada uma das prximas N linhas contm um dgito e um caractere * ou /, que representam uma operaao realizada na calculadora.

Sada
Seu programa deve imprimir uma nica linha contendo o resultado que deve ser exibido pela calculadora ao final das operaoes.

Restrioes
1 <= N <= 100 000. Os nmeros informados sao inteiros entre 1 e 9. O resultado final da conta um nmero inteiro entre 1 e 2 30 .

Exemplos
Entrada 3 2 * 1 * 3 * Sada 6

O usurio deseja calcular o resultado da seguinte expressao: 1 2 1 3. Note que a primeira ocorrencia do nmero 1 vem do fato da calculadora mostrar inicialmente 1 ao invs de 0.
Entrada 3 2 / 3 / 6 * Sada 1

Neste exemplo, o usurio deseja calcular o resultado da seguinte expressao: ((1/2)/3) 6.


Entrada 11 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 / Sada 387420489

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11006. Colorindo
Problem code: COLOR11
A Sociedade Brasileira das Cores (SBC) uma editora de livros de colorir. As crianas adoram os livros da SBC porque suas figuras, depois de pintadas, ficam muito coloridas e bonitas. Isso acontece porque a SBC se preocupa em nao deixar grandes regioes contnuas em suas figuras, que devem ser pintadas com uma cor s. At agora, o processo de verificar se uma figura tinha uma regiao contnua grande era completamente visual, mas a SBC resolveu automatizar esse processo e voce foi contratado para programar uma parte desse sistema. Uma figura representada por uma grade, de dimensao N por M. Cada quadrado dessa grade representado por uma coordenada (i, j), com 1 <= i <= N e 1 <= j <= M. Por exemplo, a coordenada (1, 5) representa o quadrado na primeira linha e quinta coluna, enquanto que a coordenada (3, 7) representa o quadrado na terceira linha e stima coluna. As linhas sao contadas de baixo para cima e as colunas da esquerda para a direita. Cada quadrado pode estar vazio ou cheio. Assumimos que uma criana s vai pintar sobre quadrados vazios e se ela pintar um quadrado de uma cor, ela ir pintar os oito vizinhos da mesma cor, desde que eles estejam vazios e que ela nao saia da rea da figura. Dada a figura e a coordenada onde uma criana vai comear a pintar, sua tarefa descobrir quantos quadrados ela ir pintar.

Entrada
A primeira linha da entrada contm 5 nmeros inteiros, N, M, X, Y e K. Os nmeros inteiros N e M sao respectivamente o nmero de linhas e colunas da grade, enquanto que (X, Y) a coordenada onde a criana vai comear a pintar e K o nmero de quadrados cheios na figura. Seguem-se K linhas, cada uma com dois inteiros A e B, que sao as coordenadas de um quadrado cheio. Garantimos que o quadrado na posiao (X, Y) est sempre vazio.

Sada
Seu programa deve imprimir uma linha contendo o nmero de quadrados pintados pela criana.

Restrioes
1 <= N, M <= 200. 1 <= K <= 10 000. 1 <= X, A <= N. 1 <= Y, B <= M.

Exemplos
Entrada 1 5 1 2 2 1 1 1 4 Sada 2 Entrada 5 5 3 3 7 2 2 2 3 2 4 3 2 3 4 4 2 4 3 Sada 18

Neste exemplo de caso de teste, temos uma figura de dimensoes 5 5. A criana comea a pintar na posiao (3, 3). Na figura abaixo ilustramos este caso. A posiao que a criana inicia est marcada com a letra "X", e os quadrados que a criana consegue pintar estao destacandos em cinza claro. Note que ela consegue pintar o quadrado (4, 4), pois este quadrado um dos quadrados que ela consegue pintar aps ter pintado o quadrado (3, 3).

Entrada 10 10 5 5 22 2 2 2 3 2 4 2 5 2 6 2 7 2 8 3 2

3 4 4 5 5 6 6 7 7 7 7 7 7 7

8 2 8 2 8 2 8 2 3 4 5 6 7 8

Sada 20

Neste exemplo de caso de teste, temos uma figura de dimensoes 10 10. A criana comea a pintar na posiao (5, 5). Na figura abaixo ilustramos este caso. A posiao que a criana inicia est marcada com a letra "X", e os quadrados que a criana consegue pintar estao destacandos em cinza claro.

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11007. Bal
Problem code: BALE11
Uma academia de bal ir organizar uma Oficina de Bal Intensivo (OBI) na Semana de Bal Contemporneo (SBC). Nessa academia, existem N bailarinas que praticam regularmente. O dono da academia, por ser experiente, consegue medir o nvel de habilidade de cada uma delas por um nmero inteiro; nessa mediao, nmeros maiores correspondem a danarinas mais habilidosas, e os nmeros obtidos sao todos distintos. Alm disso, ele possui uma lista das bailarinas em ordem cronolgica de ingresso na academia: As bailarinas que aparecem primeiro na lista estao h mais tempo na academia, e as que estao no final ingressaram mais recentemente. O dono da academia decidiu escolher duas das bailarinas para ajud-lo na realizaao do evento: uma ajudar no trabalho braal, enquanto a outra ir exemplificar os passos de bal. Por seu perfeccionismo, ele deseja que a bailarina que exemplificar os passos de dana seja, dentre as duas meninas do par, a mais habilidosa e a que frequenta a academia h mais tempo. Ele sabe que a Oficina ser um sucesso desde que os dois critrios mencionados acima sejam satisfeitos pela dupla de danarinas escolhidas. Com isso, ele ficou curioso para saber quantas duplas de danarinas podem ajud-lo na Oficina. A quantidade de danarinas, contudo, relativamente grande e ele nao possui nem tempo nem paciencia para fazer tal clculo. Como voces sao amigos, ele pediu a sua ajuda para contar quantas duplas sao vlidas. Voce pode ajud-lo? Por exemplo, digamos que a academia possua 5 danarinas com nveis de habilidade 1, 5, 2, 4 e 3, onde a primeira, que possui nvel "1", est na academia h mais tempo e a ltima, que possui nvel "3", est h menos. Temos, entao, 4 possveis duplas que poderemos usar nesta Oficina, que sao (5, 2),(5, 4),(5, 3) e (4, 3). Note que a dupla (1, 3), por exemplo, nao pode ser escolhida pelo dono da academia, pois a mais habilidosa dentre as duas tambm a mais nova da dupla.

Entrada
A primeira linha contm um nmero N, que representa a quantidade de danarinas que estao registradas na academia. A segunda linha da entrada contm N inteiros, onde o primeiro inteiro o nvel da danarina que est h mais tempo na academia, o segundo inteiro o nvel da prxima danarina mais antiga na academia (mas mais nova que a danarina anterior), e assim sucessivamente.

Sada
A sada consistir num nico nmero X, que representa o total de duplas de danarinas vlidas para essa Oficina, dadas as regras descritas anteriormente.

Restrioes
1 <= N <= 100 000. Todas as danarinas possuirao nveis distintos, entre 1 e 100 000. O total de pares vlidos, em todos os casos, ser <= 1 000 000.

Exemplos
Entrada 5 1 5 2 4 3 Sada 4 Entrada 9 9 8 7 6 5 4 3 1 2 Sada 35

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11008. Selos
Problem code: SELOS11
Euclides um garoto que gosta muito de colecionar selos. No seu aniversrio, seus pais o presentearam com N selos, todos em formato de quadrados com 1 cm de lado. Euclides gostaria de guardar todos os N selos que ganhou colando-os numa pgina de papel em branco. Ao decidir por guard-los assim, no entanto, ele logo percebeu que a nica forma que lhe agradava de posicionar os selos na pgina era a forma de um retngulo completamente coberto pelos mesmos, sem sobreposiao. Ele percebeu tambm que, independente do nmero de selos obtido, colocar todos os selos numa nica linha ou todos os selos numa nica coluna uma configuraao vlida. Como essa maneira usa a pgina do caderno de um jeito muito ineficiente, Euclides gostaria de saber se existe algum modo de dispor os N selos num retngulo que tenha mais de uma linha e mais de uma coluna tal que todas as linhas e colunas sejam completamente ocupadas por selos (isto , tal que nao existam posioes sem selos no interior do retngulo).

Entrada
A entrada contm uma nica linha com um nico inteiro N, o nmero de selos que Euclides ganhou.

Sada
A sada deve conter uma linha com um nico caracter, que deve ser S se for possvel organizar os selos em um retngulo com mais que uma linha e mais que uma coluna ou N caso nao seja possvel.

Restrioes
1 <= N <= 10 000 000 000.

Exemplos
Entrada 8 Sada S

A figura abaixo exemplifica duas maneiras de guardar os selos em forma de retngulo.

Entrada 1 Sada N Entrada 11 Sada N

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11009. O mar nao est para peixe


Problem code: PESCA11
Em um arquiplago no meio do Oceano Pacfico a economia regida pela pesca, pois o peixe o principal alimento disponvel. Ultimamente, a populaao desse arquiplago tem aumentado drasticamente, o que levou a um grande aumento da pesca, e, consequentemente, a problemas. Neste arquiplago, cada pescador vai diariamente ao alto mar com a intenao de conseguir trazer o maior nmero de peixes para o seu vilarejo. Com a expansao da pesca, os pescadores estao comeando a jogar suas redes de pesca por cima das de outros pescadores. Com isso, os pescadores perdem, pois apenas o primeiro pescador pega os peixes da intersecao entre as redes. A Associaao dos Pescadores da ilha decidiu fazer um levantamento para descobrir quanto do mar est de fato sendo aproveitado, ou seja, qual a rea do mar que est coberta por pelo menos uma rede de pesca. Como h muitas intersecoes entre as redes de pesca, muito difcil para a associaao calcular a rea total da regiao coberta pelas redes. Por este motivo, eles pediram para que voce escrevesse um programa para resolver este problema. Como muito difcil navegar pelo mar, os pescadores sempre jogam as redes de forma que as regioes cobertas por cada rede sao sempre retngulos com lados paralelos aos eixos, se imaginarmos o mar como um plano cartesiano.

Entrada
A primeira linha da entrada possui um inteiro N indicando o nmero de redes que foram lanadas. As prximas N linhas descrevem as regioes cobertas pelas redes: cada uma contm quatro inteiros X i e X f , Y i e Y f . A regiao coberta pela rede em questao contm todo ponto (X, Y) tal que X i <= X <= X f e Y i <= Y <= Y f .

Sada
A sada deve conter apenas uma linha contendo a rea da regiao do mar realmente aproveitada pelos pescadores, ou seja, a rea total da regiao do mar coberta por pelo menos uma rede de pesca.

Restrioes
1 <= N <= 100 1 <= X i <= X f <= 100 1 <= Y i <= Y f <= 100

Exemplos
Entrada 2 1 3 1 3 2 4 2 4 Sada 7 Entrada 3 1 6 1 2 3 7 1 2 2 5 1 2 Sada 6

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11010. Caa ao tesouro


Problem code: TESOUR11
Capitao Tornado um pirata muito cruel que faz qualquer coisa por dinheiro. H alguns dias, o capitao soube da existencia de um tesouro numa ilha deserta, e agora tenta determinar sua posiao. A ilha pode ser vista como um quadriculado N N de terra cuja posiao (0, 0) est a sudoeste, a posiao (N-1, 0) est a sudeste, a posiao (0, N-1) est a noroeste e a posiao (N-1, N-1) est a nordeste. Em alguma posiao desse quadriculado est o tesouro. Uma curiosidade importante a perna de pau que o capitao possui. Ela impede que o capitao se locomova em direoes que nao a horizontal ou a vertical: para ir da posiao (1, 1) para a posiao (3, 2), por exemplo, o capitao obrigado a gastar tres passos. claro que o capitao sempre escolhe, dentro de suas limitaoes, um caminho com o menor nmero de passos possvel. Chamamos esse modo de andar de passos de capitao. Um exemplo de caminho por passos de capitao entre (1, 1) e (3, 2) ilustrado na figura a seguir.

Como em toda boa caa ao tesouro, o capitao nao conhece a posiao onde o tesouro se encontra: ele possui um mapa que corresponde a geografia da ilha. Em algumas posioes desse mapa, existem pistas escritas. Cada pista consiste em um nmero D, que indica a menor distncia em passos de capitao entre a posiao em que a pista se encontra e a do tesouro.

Observe que, dependendo da disposiao das pistas, a posiao do tesouro pode estar determinada de maneira nica ou nao. Na figura acima e a esquerda, as duas pistas sao suficientes para se saber, com certeza, onde est o tesouro; na figura a direita, as quatro pistas dadas ainda possibilitam que tanto a posiao (0, 2) quanto a (2, 2) guardem o tesouro. Nesse ltimo caso, nao se pode determinar, com certeza, qual a localizaao do tesouro. Dadas as pistas que o capitao possui, sua tarefa determinar se as pistas fornecem a localizaao exata do tesouro e, caso positivo, qual ela .

Entrada
A primeira linha contm dois inteiros positivos N e K, onde N a dimensao do quadriculado e K o nmero de pistas no mapa que o capitao possui. Cada uma das prximas K linhas contem tres inteiros X, Y e D, informando que existe uma pista na posiao (X, Y) contendo o nmero D. Essa pista indica que o tesouro encontra-se a D passos de capitao da posiao da pista. garantido que, com essas pistas, existe ao menos uma localizaao possvel para o tesouro. Alm disso, o mapa nao contm duas pistas na mesma posiao.

Sada
Se as pistas forem suficientes para determinar com certeza a localizaao do tesouro, seu programa deve imprimir uma nica linha com dois inteiros, X e Y , indicando que o tesouro encontra-se na posiao (X, Y). Caso contrrio, seu programa deve imprimir uma nica linha com dois inteiros iguais a -1, como nos exemplos de sada a seguir.

Restrioes
2 <= N <= 100 1 <= K <= 100

Exemplos
Entrada 4 2 0 0 3 3 0 4 Sada 1 2 Entrada 4 4 1 0 3 1 1 2 1 2 1 1 3 2 Sada -1 -1 Entrada 3 3 0 0 2 1 1 2 2 0 4 Sada 0 2

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11011. Desafio cartogrfico


Problem code: CARTOG11
Leonardo Nascimento um garoto de 13 anos apaixonado por cartografia. Ele assina a lista de discussoes da Sociedade Brasileira de Cartografia (SBC) para ficar por dentro de todas as novidades. Em um tpico de discussao na lista da SBC, o presidente da sociedade descobriu que Leonardo tinha apenas 13 anos, e ficou muito feliz em saber que uma pessoa tao jovem tinha tanto interesse pela arte de traar mapas geogrficos e topogrficos. Foi entao que o presidente resolveu criar desafios com intuito de difundir a cartografia. Um dos desafios era o seguinte: dado um mapa de cidades ligadas por estradas, determinar a distncia entre um par de cidades mais distantes. Como o objetivo era fazer as crianas se divertirem, o presidente resolveu selecionar mapas bem simples. As restrioes adotadas foram: (a) todas as estradas sao de mao dupla; (b) todas as estradas possuem 1km de comprimento, e portanto toda estrada ligando duas cidades tem o mesmo comprimento; (c) toda estrada conecta apenas duas cidades, e (d) dadas duas cidades quaisquer A e B, s existe uma nica maneira de chegar em A partindo de B, e vice-versa. O presidente da SBC resolveu pedir sua ajuda para escrever um programa de computador que, dado um mapa seguindo as restrioes acima, devolva a resposta. Assim, ele conseguir gerar um gabarito para enviar junto com o desafio.

Entrada
A primeira linha da entrada contm um inteiro N representando o nmero de cidades no mapa. Cada uma das N-1 linhas seguintes da entrada contm dois inteiros A e B indicando que existe uma estrada entre as cidades A e B.

Sada
A nica linha da sada contm um inteiro indicando a distncia entre um par de cidades mais distantes.

Restrioes
2 <= N <= 10 6 1 <= A, B <= N e A != B

Exemplos
Entrada 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 Sada 9 Entrada 5 1 2 2 3 3 4 3 5 Sada 3

A figura abaixo ilustra este exemplo, onde temos 5 cidades identificadas por 1, 2, . . . , 5. As cidades 1 e 4 estao a uma distncia de 3km, assim como as cidades 1 e 5. Nao temos nenhum par de cidades que estao a uma distncia maior que 3km. Portanto, a resposta para esse caso 3. Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s-9s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11012. Quadrado aritmtico


Problem code: QUADRA11
Arnaldo e Bernardo sao dois garotos que compartilham um peculiar gosto por curiosidades matemticas. Nos ltimos tempos, sua principal diversao tem sido investigar propriedades matemgicas de tabuleiros quadrados preenchidos com inteiros. Um belo dia, Arnaldo desenhou o tabuleiro da seguinte figura.

-- Olha s, vrias somas nesse quadrado sao iguais! -- exclamou Bernardo. -- Como assim? -- devolveu, intrigado, Arnaldo. -- Observe:

-- mesmo! (-41) + 40 + 54 d 53, 28 + (-29) + 54 tambm! -- exclamou Arnaldo. -- Eu j verifiquei: existem 6 formas de escolhermos 3 clulas deste quadrado de forma que cada linha e coluna tenha exatamente uma clula escolhida. Em todas elas, a soma d 53. Alm disso, todos os nmeros sao distintos nesse quadrado. -- notou Bernardo, exibindo suas habilidades aritmticas.

-- Que bacana! Esse quadrado realmente mgico! Ou, melhor, esse quadrado realmente aritmtico! Ser que existem mais quadrados como esse? Uma escolha legal de clulas uma escolha em que toda linha e toda coluna tenha exatamente uma clula escolhida. Um quadrado aritmtico de tamanho N e soma S um tabuleiro de inteiros de N linhas e N colunas em que qualquer escolha legal tem soma S e em que todos os nmeros sao distintos. Sua tarefa, neste problema, gerar um quadrado aritmtico de tamanho N e soma S, dados N e S. Como Arnaldo e Bernardo vao querer conferir a sua soluao em suas calculadoras, voce nao deve gerar um quadrado em que alguma clula tenha valor absoluto maior do que 10 9 .

Entrada
A primeira e nica linha da entrada contm dois nmeros inteiros N e S (1 <= N <= 1000 e -1000 <= S <= 1000) representando, respectivamente, o tamanho e a soma do quadrado aritmtico pedido.

Sada
Seu programa deve imprimir N linhas, cada uma com N inteiros entre -10 9 e 10 9 , representando o quadrado aritmtico pedido. Para uma mesma entrada, podem existir vrios quadrados aritmticos vlidos; seu programa deve imprimir qualquer um deles, mas apenas um. garantido que existir pelo menos um quadrado aritmtico vlido para cada entrada testada.

Restrioes
1 <= N <= 1000 -1000 <= S <= 1000 -10 9 <= valor de cada clula <= 10 9

Exemplos
Observe que, neste problema, para uma mesma entrada, podem existir vrias sadas corretas. As sadas abaixo indicam apenas uma de vrias potenciais soluoes. Contanto que sua sada seja um quadrado aritmtico vlido segundo as condioes do enunciado, sua soluao ser considerada correta, mesmo que nao seja igual aos exemplos indicados abaixo.
Entrada 2 49 Sada 23 40 9 26 Entrada 3 53 Sada -41 -29 2 28 40 71 11 23 54 Entrada

1 -55 Sada -55

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s-3s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11013. Quadrado mgico


Problem code: MAGICO11
Arnaldo e Bernardo sao dois garotos que compartilham um peculiar gosto por curiosidades matemticas. Nos ltimos tempos, sua principal diversao tem sido investigar propriedades matemgicas de tabuleiros quadrados preenchidos com inteiros. Recentemente, durante uma aula de matemtica, os dois desafiaram os outros alunos da classe a criar quadrados mgicos, que sao quadrados preenchidos com nmeros de 1 a N 2 , de tal forma que a soma dos N nmeros em uma linha, coluna ou diagonal principal do quadrado tenham sempre o mesmo valor. A ordem de um quadrado mgico o seu nmero de linhas, e o valor do quadrado mgico o resultado da soma de uma linha. Um exemplo de quadrado mgico de ordem 3 e valor 15 mostrado na figura abaixo:

Para surpresa de Arnaldo e Bernardo, os outros alunos criaram um grande nmero de quadrados, alguns enormes, e alegaram que todos eram quadrados mgicos. Arnaldo e Bernardo agora precisam de sua ajuda, para verificar se os quadrados criados sao realmente mgicos. Voce deve escrever um programa que, dado um quadrado, verifique se ele realmente mgico.

Entrada
A primeira linha da entrada contm um nico nmero inteiro N, indicando a ordem do quadrado (seu nmero de linhas). As N linhas seguintes descrevem o quadrado. Cada uma dessas linhas contm N nmeros inteiros separados por um espao em branco.

Sada
Seu programa deve imprimir uma nica linha. Caso o quadrado seja mgico, a linha deve conter o valor do quadrado (ou seja, a soma de uma de suas linhas). Caso contrrio, a linha deve conter o nmero 0.

Restrioes
3 <= N <= 1000. 1 <= valor de cada clula <= 10 9 .

Exemplos
Entrada 3 1 1 1 1 1 1 1 1 1 Sada 0 Entrada 4 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 Sada 34 Entrada 3 4 8 9 11 7 3 6 5 10 Sada 0

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11014. Expressoes
Problem code: EXPRES11
Pedrinho e Zezinho estao precisando estudar resoluao de expressoes matemticas para uma prova que irao fazer. Para isso, eles querem resolver muitos exerccios antes da prova. Como sabem programar, entao decidiram fazer um gerador de expressoes matemticas. O gerador de expressoes que eles criaram funciona em duas fases. Na primeira fase gerada uma cadeia de caracteres que contm apenas os caracteres {, [, (, }, ] e ). Na segunda fase, o gerador adiciona os nmeros e operadores na estrutura criada na primeira fase. Uma cadeia de caracteres dita bem definida (ou vlida) se atende as seguintes propriedades: 1. Ela uma cadeia de caracteres vazia (nao contm nenhum caractere). 2. Ela formada por uma cadeia bem definida envolvida por parenteses, colchetes ou chaves. Portanto, se a cadeia S bem definida, entao as cadeias (S), [S] e {S} tambm sao bem definidas. 3. Ela formada pela concatenaao de duas cadeias bem definidas. Logo, se as cadeias X e Y sao bem definidas, a cadeia XY bem definida. Depois que Pedrinho e Zezinho geraram algumas expressoes matemticas, eles perceberam que havia algum erro na primeira fase do gerador. Algumas cadeias nao eram bem definidas. Eles querem comear a resolver as expressoes o mais rpido possvel, e sabendo que voce um timo programador (e participa da OBI) resolveram pedir que escreva um programa que dadas vrias cadeias geradas na primeira fase, determine quais delas sao bem definidas e quais nao sao.

Entrada
A entrada composta por diversas instncias. A primeira linha da entrada contm um inteiro T indicando o nmero de instncias. Em seguida temos T linhas, cada uma com uma cadeia A.

Sada
Para cada instncia imprima uma linha contendo a letra S se a cadeia bem definida, ou a letra N caso contrrio.

Restrioes
1 <= T <= 20. a cadeia de caracteres A tem entre 1 e 100000 caracteres. a cadeia de caracteres A contm apenas caracteres {, [, (, }, ] e ).

Exemplos
Entrada 12 () [] {} (] }{ ([{}]) {}()[] ()] {[] ( (([{}{}()[]])(){}){} (((((((((({([])}]))))))))) Sada S S S N N S S N N N S N

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11015. Escalonamento timo


Problem code: ESCALO11
O SBC (System for Batch Computing) um sistema operacional voltado para a execuao sequencial de tarefas. O operador do sistema cria tarefas e o sistema operacional responsvel por agendar a execuao destas tarefas. Cada tarefa pode depender da conclusao de algumas tarefas para poder comear. Se uma tarefa A depende de uma tarefa B, a tarefa B deve terminar antes que a tarefa A inicie sua execuao. Alm disto, cada tarefa possui uma prioridade. sempre mais vantajoso para o sistema comear executando uma tarefa de mais alta prioridade, depois continuar executando uma tarefa de mais alta prioridade dentre as que sobraram e assim por diante. Neste problema, ser dado um inteiro N, que ir representar o nmero de tarefas no sistema. As tarefas serao numeradas de 0 at N-1. Tarefas com ndice menor possuem prioridade maior, de forma que a tarefa 0 a tarefa de mais alta prioridade, a tarefa 1 a tarefa com a segunda maior prioridade e assim por diante, at a tarefa N-1, que a tarefa com a menor prioridade. Alm disso, serao dadas M relaoes de dependencia entre as tarefas. Seu objetivo ser decidir se possvel executar as tarefas em alguma ordem. Caso seja possvel, voce dever produzir uma ordem de execuao tima para as tarefas, isto , desempate as ordens possveis pela prioridade da primeira tarefa. Se o empate ainda persistir, desempate pela prioridade da segunda tarefa, e assim por diante.

Entrada
A primeira linha da entrada contm inteiros N e M. As prximas M linhas descrevem, cada uma, uma dependencia entre as tarefas da entrada. Cada uma dessas linhas ir conter dois inteiros A e B que indicam que a tarefa B depende da tarefa A, isto , que a tarefa A deve terminar antes que a tarefa B inicie.

Sada
Se nao for possvel ordenar as tarefas de forma que as dependencias sejam satisfeitas, imprima uma nica linha contendo o caracter "*". Caso contrrio, imprima N linhas contendo cada uma um nmero inteiro. O inteiro na i-sima linha deve ser o ndice da i-sima tarefa a ser executada na ordem tima de execuao das tarefas.

Restrioes
0 <= N <= 50000. 0 <= M <= 200000. 0 <= A, B < N.

Exemplos
Entrada 3 1 2 0 Sada 1 2 0 Entrada 2 2 0 1 1 0 Sada *

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11016. Reduzindo detalhes em um mapa


Problem code: RMAPA11
Leonardo Nascimento um garoto de 13 anos apaixonado por cartografia. Durante as frias de janeiro de 2011, ele alternava seu tempo entre navegar na internet (pesquisando sobre mapas) e arrumar sua coleao de mapas. Navegando na internet, Leonardo descobriu um site especializado em mapas, o Google Maps. Depois de alguns dias usando o site, Leonardo percebeu que quando diminua o zoom algumas ruas nao eram mais exibidas no mapa, isto , o zoom determinava tambm o nvel de detalhe do mapa. A figura abaixo ilustra um dos testes feito por Leonardo.

Ele sabe que voce participa da OBI e que voce adora resolver os problemas que envolvem mapas. Entao resolveu formular o seguinte problema: dado um mapa de cidades e rodovias que as ligam, selecione um subconjunto das rodovias tal que entre qualquer par de cidades exista uma rota ligando-as e a soma dos comprimentos das rodovias mnimo. Na figura abaixo e a esquerda temos um exemplo com cinco cidades e seis rodovias ligando-as. A figura abaixo e a direita ilustra uma soluao cuja soma dos comprimentos 34.

Para facilitar um pouco sua vida, Leonardo determinou que voce s precisa dizer a soma dos comprimentos das rodovias do subconjunto selecionado para um dado mapa.

Entrada
A primeira linha da entrada contm dois nmeros N e M que representam o nmero de cidades e o nmero de rodovias respectivamente. Cada uma das prximas M linhas composta por tres inteiros U, V e C que indiciam que existe uma rodovia de comprimento C que liga as cidades U e V.

Sada
A sada consiste em apenas uma linha contendo a soma do comprimento das rodovias selecionadas.

Restrioes
1 <= N <= 500. 1 <= M <= 124750. 1 <= U, V <= N e U != V . 1 <= C <= 500.

Exemplos
Entrada 5 6 1 2 15 1 3 10 2 3 1 3 4 3 2 4 5 4 5 20 Sada 34 Entrada 4 6 1 2 1 1 3 10 1 4 1 2 3 1 2 4 10 3 4 1 Sada 3

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11017. Vira!
Problem code: VIRA11
Vira! um jogo individual que se inicia com N peas igualmente espaadas em uma linha. Cada pea do Vira! possui dois lados, sendo um branco e um preto; assim, ao virar uma pea, alterna-se a cor que est sendo mostrada entre branco e preto. A figura abaixo ilustra um possvel arranjo com 5 peas, duas mostrando o lado branco e duas mostrando o lado preto.

Um movimento consiste em retirar uma pea preta - criando um espao - e inverter as peas vizinhas a retirada. Sendo assim, dependendo do nmero de peas vizinhas a retirada, um movimento pode inverter duas, uma, ou mesmo nenhuma pea (se nao houver peas vizinhas a que est sendo retirada). Voce vence o jogo quando consegue remover todas as peas. A figura abaixo exemplifica uma sequencia de movimentos que resolvem uma instncia do problema com 5 peas, em que as peas sao retiradas na ordem 5-2-1-3-4.

Para uma determinada disposiao inicial das peas, podem existir vrias soluoes diferentes. Por exemplo, poderamos retirar as peas na ordem 5-2-3-4-1 e ainda assim conseguir retirar todas as peas. Sua tarefa, neste problema, consiste em contar o nmero de soluoes diferentes para uma dada disposiao inicial das peas. Como o nmero de soluoes pode ser muito grande, voce deve imprimir apenas o resto do nmero quando dividido por 10007.

Entrada
A primeira linha da entrada contm o inteiro N. A linha seguinte contm N letras separadas por espao representando o arranjo inicial das peas. Uma pea branca indicada pela letra B na entrada, e uma pea preta indicada pela letra P.

Sada
Seu programa deve imprimir uma linha contendo o nmero de soluoes distintas que resolvem o jogo.

Restrioes
1 <= N <= 1000.

Exemplos
Entrada 5 B P B P P Sada 11 Entrada 3 B P B Sada 2

Added by: Wanderley Guimares Date: 2012-03-10 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2011 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11628. Bactrias
Problem code: BACT09
Bruno um bilogo apaixonado por sua profissao. Sua especialidade estudar o comportamento de bactrias. Por isso, ele possui em seu laboratrio centenas de colnias de diferentes tipos desses microorganismos. Nesta semana ele viu o anncio de um evento inusitado: uma feira de bactrias. Nessa feira, vrios fornecedores estarao vendendo diferentes tipos de bactrias. Cada tipo de bactria vendido em uma placa de vidro, j preparada para a formaao de uma colnia de bactrias. Cada placa de vidro vendida com apenas uma bactria inicialmente. Bruno deu uma olhada no catlogo com os tipos de bactrias que estarao a venda na feira, e notou algumas coisas interessantes: Todos os tipos de bactrias a venda terao o mesmo preo. Todas as bactrias (de todos os tipos) se subdividem todas as noites para gerar outras bactrias. Por exemplo, a bactria da colnia de tipo X se subdivide em 2 outras bactrias todas as noites. Assim, no primeiro dia teremos s uma bactria na colnia. No dia seguinte, teremos 2, e no prximo, 4. A quantidade de divisoes de uma bactria depende do seu tipo. O crescimento da colnia cessa aps um determinado nmero de dias, por causa da escassez de alimento. A quantidade de dias em que uma colnia cresce depende do tipo de bactria. final de mes e Bruno j gastou quase todo o seu dinheiro. Assim, resolveu que ir comprar apenas uma colnia de bactrias. No entanto, ele pretende comprar a colnia que fornea a maior quantidade de bactrias ao final do perodo de crescimento da mesma. Ele tem um catlogo mostrando os tipos de bactrias a venda. Para cada tipo de bactria, o catlogo informa a quantidade de bactrias geradas por uma bactria desse tipo a cada divisao e por quantos dias a populaao da colnia crescer. Porm, a calculadora que ele tem em casa nao suficiente para que ele faa os clculos necessrios para decidir qual a melhor colnia a comprar.

Tarefa
Bruno pediu sua ajuda para decidir qual o melhor tipo de bactria para a compra. Lembre que para Bruno o melhor tipo de bactria aquele cuja colnia, ao final do perodo de crescimento, ter a maior quantidade de bactrias.

Voce deve supor que nao haver duas colnias com a mesma populaao final de bactrias.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm um inteiro N (1 <= N <= 50.000) representando a quantidade tipos de bactrias no catlogo. Cada uma das N linhas seguintes contm informaoes sobre um tipo de bactria: a primeira dessas linhas contm a informaao da bactria de tipo 0, a segunda dessas linhas contm a informaao sobre a bactria de tipo 1, e assim por diante. A ltima dessas linhas contm a informaao da bactria de tipo N - 1. A informaao para cada tipo de bactria composta por dois nmeros inteiros D e C (1 <= D <= 2.000 e 1 <= C <= 5.000), onde D quantidade de bactrias que cada bactria deste tipo gera ao se dividir numa noite, e C a quantidade de dias que a populaao de bactrias crescer.

Sada
Seu programa deve imprimir, na sada padrao, um nmero inteiro entre 0 e N - 1 representando o tipo da bactria que Bruno dever comprar.

Exemplos
Entrada 2 2 5 3 4 Sada 1 Entrada 5 2 1 4 5 30 4 20 6 2 154 Sada 4 Entrada 4 145 15 2 4999 3 3211 135 20 Sada 2

Added by: Wanderley Guimares Date: 2012-05-30 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11629. Competio de chocolate


Problem code: CHOCPJ09
Carlos e Paula acabaram de ganhar um saco com bolinhas de chocolate. Como sabem que vao comer tudo muito rpido inventaram uma brincadeira: Eles vao comer de forma alternada, um depois o outro, sendo que sempre a Paula comea. Quem comer a ltima bolinha ganha a bricadeira. A cada vez, s se pode comer de 1 a M bolinhas, sendo o M decidido pela mae de Paula, de forma que nao engasguem com o chocolate. Um exemplo de partida para M = 5, onde Paula ganhou:

Ambos sao muito espertos e jogam de maneira tima, de forma que se existe para um deles uma sequencia de jogadas que garante a vitria independente da jogada do outro, essa pessoa jogar dessa forma.

Tarefa
Sua tarefa determinar quem vai ganhar a brincadeira, se ambos jogam de forma tima.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A entrada consiste de uma linha contendo dois inteiros N (1 <= N <= 10 6 ) e M (1 <= M <= 10 3 ), sendo N o nmero de bolinhas de chocolate e M o nmero de bolinhas permitidas por vez.

Sada
Seu programa deve imprimir, na sada padrao, uma linha, contendo o nome do vencedor, como exemplificado abaixo.

Exemplos
Entrada 5 3 Sada Paula Entrada 30 5 Sada Carlos

Added by: Wanderley Guimares Date: 2012-05-30 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel jnior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11630. Competio de chocolate


Problem code: CHOC09
Carlos e Paula acabaram de ganhar um saco com bolinhas de chocolate. Como sabem que vao comer tudo muito rpido inventaram uma brincadeira: Eles vao comer de forma alternada, um depois o outro, sendo que sempre a Paula comea. A cada vez, s se pode comer de 1 a M bolinhas, sendo o M decidido pela mae de Paula, de forma que nao engasguem com o chocolate. Se um comeu K bolinhas em sua vez, o prximo nao pode comer o mesmo tanto, tendo que comer um nmero de bolinhas distinto. Quem nao puder mais jogar de maneira vlida perde. Um exemplo de partida para M = 5 e 20 bolinhas, onde Carlos ganhou:

Observe que no final Carlos nao poderia comer 2 bolinhas para ganhar, pois seria o mesmo que Paula comeu na vez anterior. Mas Paula tambm nao pde comer a ltima bolinha, pois Carlos havia comido apenas uma na rodada anterior, assim Paula ficou sem opao de jogada e perdeu. Ambos sao muito espertos e jogam de maneira tima, de forma que se existe para um deles uma sequencia de jogadas que garante a vitria independente da jogada do outro, essa pessoa jogar dessa forma.

Tarefa
Sua tarefa determinar quem vai ganhar a brincadeira, se ambos jogam de forma tima.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A entrada consiste de uma linha contendo dois inteiros N (2 <= N <= 10 6 ) e M (2 <= M <= 10 3 ), sendo N o nmero de bolinhas de chocolate e M o nmero de bolinhas permitidas por vez.

Sada
Seu programa deve imprimir, na sada padrao, uma linha, contendo o nome do vencedor, como exemplificado abaixo.

Exemplos
Entrada 5 3 Sada Paula Entrada 20 5 Sada Carlos Entrada 5 6 Sada Paula

Added by: Wanderley Guimares Date: 2012-05-30 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel 1 e 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11631. Nmero de Envelopes


Problem code: ENVEL09
Aldo um garoto muito esperto que adora promooes e sorteios. Como j participou de muitas promooes da forma "para participar, envie n rtulos de produtos ...", Aldo tem o costume de guardar o rtulo de todos os produtos que compra. Dessa forma, sempre que uma empresa faz uma promoao ele j tem um monte de rtulos para mandar. A SBC (Super Balas e Caramelos) est fazendo uma nova promoao, e, como era de se esperar, Aldo quer participar. Para participar da promoao preciso enviar um envelope contendo um rtulo de cada tipo de bala que a SBC produz. Por exemplo, se a SBC produz 3 tipos de balas, A, B, C, e uma pessoa tem 3 rtulos de A, 3 de B e 2 de C, ela pode enviar no mximo 2 envelopes, j que falta um rtulo de C para compor o terceiro envelope. Nao h limite para o nmero de envelopes que uma pessoa pode enviar. Balas sao a segunda coisa de que Aldo mais gosta (a primeira como voce sabe sao promooes). Por causa disso a quantidade de rtulos de balas que ele tem muito grande, e ele nao est conseguindo determinar a quantidade mxima de envelopes que ele pode enviar. Como voce o melhor amigo de Aldo ele pediu sua ajuda para fazer o clculo, de modo que ele compre o nmero exato de envelopes.

Tarefa
Voce deve escrever um programa que, a partir da lista de rtulos de Aldo, calcula o nmero mximo de envelopes vlidos que ele pode enviar.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha contm dois nmeros inteiros N (1 <= N <= 1000000) e K (1 <= K <= 1000) representando respectivamente a quantidade de rtulos de balas que Aldo possui e o nmero de tipos diferentes de bala que a SBC produz. Os tipos de balas sao identificados por inteiros de 1 a K. A segunda linha contm N nmeros inteiros X i , cada um representando um rtulo de bala que Aldo possui (1 <= X i <= K, para 1 <= i <= N).

Sada
Seu programa deve imprimir, na sada padrao, o nmero mximo de envelopes vlidos que Aldo pode enviar.

Exemplos
Entrada 10 2 1 1 1 1 1 2 2 2 2 2 Sada 5 Entrada 20 5 1 2 3 4 1 2 3 4 1 2 3 4 5 1 2 3 4 5 4 4 Sada 2

Added by: Wanderley Guimares Date: 2012-05-31 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11636. O fugitivo
Problem code: FUGIT09
Demasi um terrorista e mafioso italiano que tentou escapar vindo para o Brasil. Mas Demasi nao contava com a astcia de nossa polcia, e acabou sendo preso aqui tambm. Por ser mafioso, Demasi conseguiu contratar advogados muito bons, que atravs de muitos recursos na justia, acabaram conseguindo uma liberdade condicional para ele. Nessa liberdade condicional, Demasi deve permanecer a uma certa distncia da delegacia de polcia responsvel por ele. Para monitor-lo melhor, eles instalaram nele uma coleira eletrnica inquebrvel que, minuto a minuto, envia para uma central as movimentaoes de Demasi naquele momento. A informaao da coleira enviada indicando uma direao e uma distncia. Por exemplo, em quatro minutos chegam as quatro linhas de informaao abaixo:
N O S L 30 44 22 10

Isso significa que no primeiro minuto Demasi se deslocou 30 metros para o norte (letra N), no minuto seguinte andou 44 metros para o oeste (letra O), no outro minuto andou 22 metros para o sul (letra S) e no quarto minuto se deslocou 10 metros para o leste (letra L). Para poder dar um castigo ao terrorista, o juiz decidiu que Demasi s poderia andar nas quatro direoes citadas acima. Ou seja, Demasi nunca se movimenta na direao noroeste, por exemplo. Neste problema, voce pode supor que todos os movimentos de Demasi ocorrem sobre um plano cartesiano. A polcia precisa estar sempre atenta a movimentaao dele, e pede a sua ajuda para verificar se em algum momento o italiano se desloca a uma distncia da delegacia maior do que a permitida. A distncia considerada para esta medida a distncia euclidiana.

Tarefa
Sua missao criar um programa que receba as informaoes da coleira de Demasi e diga se em algum momento Demasi esteve a uma distncia maior do que a permitida. Voce deve assumir que no instante 0 (zero) Demasi est dentro da delegacia (ou seja, a uma distncia zero).

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois inteiros N e M (2 <= N <= 500.000, 1 <= M <= 1.000.000) representando o nmero de registros enviados pela coleira de Demasi e a distncia mxima que ele pode ficar da delegacia, respectivamente. As N linhas seguintes contem os registros da coleira, em ordem de envio. Cada linha contm um caractere C (N, S, L ou O, como especificados acima) e um inteiro D (1 <= D <= 1.000) representando a distncia percorrida no minuto.

Sada
Seu programa deve imprimir, na sada padrao, o valor 1 se em algum momento Demasi se afastou da delegacia alm da distncia permitida, ou o valor 0 caso contrrio.

Exemplos
Entrada 5 10 N 2 L 3 S 4 O 4 O 3 Sada 0 Entrada 5 10 N 6 L 8 S 15 O 5 O 4 Sada 1

Added by: Wanderley Guimares Date: 2012-05-31 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11638. Maratona
Problem code: MARAT09
A maratona talvez a prova mais desgastante entre as modalidades olmpicas: sao quarenta e dois mil, cento e noventa e cinco metros de percurso. Por isso, os organizadores sempre posicionam vrios postos de gua ao longo do trajeto da prova, onde copos de gua sao distribudos aos competidores. Joao Saci um jovem atleta que tem boas chances de se tornar um maratonista de primeira linha. No entanto, Joao Saci descobriu que somente consegue terminar uma maratona se ingerir alguns copos de gua durante o percurso. O Laboratrio de Biomecnica da universidade local, atravs de experimentos, determinou que Joao Saci consegue percorrer exatamente mais dois mil metros aps o instante em que ingere um copo de gua. A distncia que Joao Saci consegue percorrer aps ingerir um copo de gua denominada de distncia intermediria mxima. Assim, se a distncia entre dois postos de gua consecutivos no percurso da maratona for sempre menor ou igual do que a distncia intermediria mxima de Joao Saci, ele consegue terminar a prova. Caso contrrio ele nao consegue terminar a prova. O Laboratrio de Biomecnica quer agora realizar estudos similares com outros maratonistas, que tem valor de distncias intermedirias mximas distintas, e precisa de sua ajuda.

Tarefa
Sua tarefa escrever um programa que, dada a posiao dos postos de gua ao longo do percurso, e a distncia intermediria mxima de um atleta, determine se o atleta consegue ou nao completar a prova.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois nmeros inteiros N e M, separados por um espao em branco, indicando respectivamente o nmero de postos de gua (2 <= N <= 10000) e a distncia intermediria mxima de um atleta, em metros (1 <= M <= 42195). A segunda linha contm N nmeros inteiros P i , separados por um espao em branco, representando a posiao dos postos de gua ao longo do trajeto da maratona. A posiao de um posto de gua dada pela distncia, em metros, do incio do percurso at o posto de gua (0 <= P i <= 42195 para 1 <= i <= N). O primeiro posto de gua est sempre localizado no ponto de partida (ou seja, P 1 = 0) e todos os postos estao em posioes distintas. Alm disso, os postos de gua sao dados na ordem crescente de sua distncia ao incio do percurso.

Note que a distncia total da prova a oficial para a maratona, ou seja, 42195 metros.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha contendo o caractere S se o atleta consegue terminar a prova, ou o caractere N caso contrrio.

Exemplos
Entrada 3 20000 0 20000 33333 Sada S Entrada 8 6000 0 6000 12000 18000 24000 32000 37000 40000 Sada N

Added by: Wanderley Guimares Date: 2012-05-31 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11641. Caadores de Mitos


Problem code: MITO09
Jorge um apresentador de televisao que comanda a versao brasileira do grande sucesso Caadores de Mitos, onde se estuda um mito para descobrir se fato ou apenas um boato. No prximo episdio, Jorge dever apresentar o mito que diz que "os raios nao caem duas vezes no mesmo lugar", referindo-se aos raios das tempestades de chuva. Para isso, foi at a cidade de Eletrolndia, que a cidade com maior ocorrencia de raios no mundo. O prefeito tem tanto orgulho desse ttulo que mandou criar um sistema para registrar os raios. Jorge conseguiu um relatrio com as ocorrencias de cada raio que caiu na cidade nos ltimos anos. O mapa de Eletrolndia um retngulo. Para o sistema de registro a cidade subdividida em quadrados de um metro de lado, denominados quadrantes. Assim, se a cidade tem 300 metros de largura e 1000 de comprimento, ela ser subdividida em 300.000 quadrantes. O sistema de registro armazena o quadrante em que o raio caiu. Cada quadrante identificado pelas suas coordenadas X e Y, conforme ilustra a figura abaixo, que exemplifica um mapa de uma cidade com oito metros de comprimento por cinco metros de largura (quarenta quadrantes).

Como os quadrantes sao relativamente pequenos, Jorge decidiu que se dois raios caram no mesmo quadrante, pode-se considerar que caram no mesmo lugar.

Tarefa
Sua missao escrever um programa que receba as coordenadas dos raios que caram em Eletrolndia nos ltimos anos e determine se o mito estudado realmente apenas um mito ou pode ser considerado verdade.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm um nmero inteiro N (2 <= N <= 500.000) representando o nmero de registros de raios no relatrio. Cada uma das N linhas seguintes contm 2 nmeros inteiros X, Y (0 <= X, Y <= 500), representando o registro de um raio que caiu no quadrante cujas coordenadas sao (X, Y).

Sada
Seu programa deve imprimir, na sada padrao, o nmero 0 se nenhum raio caiu no mesmo lugar, ou o nmero 1 caso contrrio. Note que voce deve imprimir o nmero 1 mesmo que haja mais do que 1 par de raios que caram no mesmo lugar.

Exemplos
Entrada 5 1 1 2 3 3 3 4 2 4 4 Sada 0 Entrada 8 1 1 2 2 2 3 4 4 2 3 6 5 9 11 10 10 Sada 1

Added by: Wanderley Guimares Date: 2012-05-31 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11645. Notas da prova


Problem code: NOTA09
Rosy uma talentosa professora do Ensino Mdio que j ganhou muitos premios pela qualidade de sua aula. Seu reconhecimento foi tamanho que foi convidada a dar aulas em uma escola da Inglaterra. Mesmo falando bem ingles, Rosy ficou um pouco apreensiva com a responsabilidade, mas resolveu aceitar a proposta e encar-la como um bom desafio. Tudo ocorreu bem para Rosy at o dia da prova. Acostumada a dar notas de 0 (zero) a 100 (cem), ela fez o mesmo na primeira prova dos alunos da Inglaterra. No entanto, os alunos acharam estranho, pois na Inglaterra o sistema de notas diferente: as notas devem ser dadas como conceitos de A a E. O conceito A o mais alto, enquanto o conceito E o mais baixo. Conversando com outros professores, ela recebeu a sugestao de utilizar a seguinte tabela, relacionando as notas numricas com as notas de conceitos:

O problema que Rosy j deu as notas no sistema numrico, e ter que converter as notas para o sistema de letras. Porm, Rosy precisa preparar as prximas aulas (para manter a qualidade que a tornou reconhecida), e nao tem tempo suficiente para fazer a conversao das notas manualmente.

Tarefa
Voce deve escrever um programa que recebe uma nota no sistema numrico e determina o conceito correspondente.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A entrada contm uma nica linha com um nmero inteiro N (0 <= N <= 100), representando uma nota de prova no sistema numrico.

Sada
Seu programa deve imprimir, na sada padrao, uma letra (A, B, C, D, ou E em maisculas) representando o conceito correspondente a nota dada na entrada.

Exemplos
Entrada 12 Sada D Entrada 87 Sada A Entrada 0 Sada E

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11646. Olimpadas
Problem code: OLIMP09
O Comite Olmpico Internacional (COI) est visitando as cidades candidatas a sediar as Olimpadas de 2016. O Rio de Janeiro uma das cidades concorrentes, mas a competiao muito acirrada. O COI tem um conjunto de exigencias que devem ser obedecidas pelas cidades candidatas, como boas arenas para os jogos (ginsios, campos de futebol, pistas de atletismo, parque aqutico,...), bons alojamentos, um plano para o trfego de veculos durante os jogos, etc. Durante sua visita ao Rio de Janeiro, o COI colocou ainda mais uma exigencia: a demonstraao da qualidade dos sistemas de informtica. Especificamente, o COI quer que a organizaao local demonstre a sua capacidade em informtica produzindo um programa que gere a classificaao final dos pases, considerando o nmero de medalhas recebidas pelos atletas de cada pas.

Tarefa
Sua tarefa escrever um programa que, dada a informaao dos pases que receberam medalhas de ouro, prata e bronze em cada modalidade, gere a lista de classificaao dos pases na competiao. Nesta tarefa, os pases serao identificados por nmeros inteiros. O melhor colocado deve ser o pas que conseguiu o maior nmero de medalhas de ouro. Se houver empate entre pases no nmero de medalhas de ouro, o melhor colocado entre esses o pas que conseguiu o maior nmero de medalhas de prata. Se houver empate tambm no nmero de medalhas de prata, o melhor colocado entre esses o pas que recebeu o maior nmero de medalhas de bronze. Se ainda assim houver empate entre dois pases, o melhor classificado o que tem o menor nmero de identificaao.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois nmeros inteiros N e M, separados por um espao em branco, indicando respectivamente o nmero de pases (1 <= N <= 100) e nmero de modalidades esportivas envolvidas na competiao (1 <= M <= 100). Os pases sao identificados por nmeros inteiros de 1 a N. Cada uma das M linhas seguintes contm tres nmeros inteiros O, P e B, separados por um espao em branco, representando os pases cujos atletas receberam respectivamente medalhas de ouro (1 <= O <= N), prata (1 <= P <= N) e bronze (1 <= B <= N). Assim, se uma das M linhas contm os nmeros 3 2 1, significa que nessa modalidade a medalha de ouro foi ganha pelo pas 3, a de prata pelo pas 2 e a de bronze pelo pas 1.

Sada
Seu programa deve imprimir, na sada padrao, uma linha contendo N nmeros, separados por um espao em branco, representando os pases na ordem decrescente de classificaao (o primeiro nmero representa o pas que o primeiro colocado, o segundo nmero representa o pas que o segundo colocado, e assim por diante).

Exemplos
Entrada 2 2 2 1 2 1 2 2 Sada 2 1 Entrada 4 3 3 2 1 4 3 1 4 3 1 Sada 4 3 2 1 Entrada 3 3 3 1 2 2 3 1 1 2 3 Sada 1 2 3

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11647. Overflow
Problem code: OVERF09
Os computadores foram inventados para realizar clculos muito rapidamente, e atendem a esse requisito de maneira extraordinria. Porm, nem toda conta pode ser feita num computador, pois ele nao consegue representar todos os nmeros dentro de sua memria. Em um computador pessoal atual, por exemplo, o maior inteiro que possvel representar em sua memria 4.294.967.295. Caso alguma conta executada pelo computador de um resultado acima desse nmero, ocorrer o que chamamos de overflow, que quando o computador faz uma conta e o resultado nao pode ser representado, por ser maior do que o valor mximo permitido (em ingles overflow significa trasbordar). Por exemplo, se um computador s pode representar nmeros menores do que 1023 e mandamos ele executar a conta 1022 + 5, vai ocorrer overflow.

Tarefa
Dados o maior nmero que um computador consegue representar e uma expressao de soma ou multiplicaao entre dois inteiros, determine se ocorrer overflow.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm um inteiro N (1 <= N <= 500.000) representando o maior nmero que o computador consegue representar. A segunda linha contm um inteiro P (0 <= P <= 1000), seguido de um espao em branco, seguido de um caractere C (que pode ser + ou *, representando os operadores de adiao e multiplicaao, respectivamente), seguido de um espao em branco, seguido de um outro inteiro Q (0 <= Q <= 1000). Essa linha representa a expressao P + Q, se o caractere C for +, ou P Q, se o caractere C for *.

Sada
Seu programa deve imprimir, na sada padrao, a palavra OVERFLOW se o resultado da expressao causar um overflow, ou a palavra OK caso contrrio. Ambas as palavras devem ser escritas com letras maisculas.

Exemplos
Entrada 10 5 + 5 Sada OK Entrada 44 23 * 2 Sada OVERFLOW Entrada 323500 42 * 35 Sada OK

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11648. Avioes de papel


Problem code: PAPEL09
Para descontrair os alunos aps as provas da OBI, a Diretora da escola organizou um campeonato de avioes de papel. Cada aluno participante receber uma certa quantidade de folhas de um papel especial para fazer os seus modelos de avioes. A quantidade de folhas que cada aluno dever receber ainda nao foi determinada: ela ser decidida pelos juzes do campeonato. A diretora convidou, para atuarem como juzes, engenheiros da Embraer, uma das mais bem sucedidas empresas brasileiras, que vende avioes com tecnologia brasileira no mundo todo. O campeonato est programado para comear logo aps a prova da OBI, mas os juzes ainda nao chegaram a escola. A diretora est aflita, pois comprou uma boa quantidade de folhas de papel especial, mas nao sabe se a quantidade comprada vai ser suficiente. Considere, por exemplo, que a Diretora comprou 100 folhas de papel especial, e que h 33 competidores. Se os juzes decidirem que cada competidor tem direito a tres folhas de papel, a quantidade comprada pela diretora suficiente. Mas se os juzes decidirem que cada competidor tem direito a quatro folhas, a quantidade comprada pela diretora nao seria suficiente.

Tarefa
Voce deve escrever um programa que, dados o nmero de competidores, o nmero de folhas de papel especial compradas pela Diretora e o nmero de folhas que cada competidor deve receber, determine se o nmero de folhas comprado pela Diretora suficiente.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). O arquivo de entrada contm tres nmeros inteiros C (1 <= C <= 1000), P (1 <= P <= 1000) e F (1 <= F <= 1000) representando respectivamente o nmero de competidores, a quantidade de folhas de papel especial compradas pela Diretora e a quantidade de folhas de papel especial que cada competidor deve receber.

Sada
Seu programa deve imprimir, na sada padrao, o caractere S se a quantidade de folhas compradas pela Diretora suficiente, ou o caractere N caso contrrio. Note que os caracteres devem ser letras maisculas.

Exemplos
Entrada 10 100 10 Sada S Entrada 10 90 10 Sada N Entrada 5 40 2 Sada S

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11649. Caminho das pontes


Problem code: PONTES09
Pedrinho um rapaz muito aventureiro, que nas frias viaja pelo mundo em busca de lugares afastados e com bonitas vistas. Na sua viagem atual, Pedrinho est andando por uma escura floresta quando se depara com um perigoso desfiladeiro. Do outro lado do desfiladeiro ele sabe que existe um acampamento onde poder descansar durante a noite para continuar suas aventuras no dia seguinte. Para chegar at o acampamento, ele ter que utilizar pontes que estao suspensas sobre o desfiladeiro. As pontes foram construdas interligando altos pilares cravados no fundo do desfiladeiro.

O piso das pontes feita de tbuas de tamanhos iguais. Mas as pontes sao velhas, e algumas tbuas caram. Felizmente, todas as tbuas que sobraram estao em perfeitas condioes, ou seja, nao existe o perigo de Pedrinho pisar em uma delas e a tbua cair. Alm disso, em nenhuma das pontes duas tbuas consecutivas caram, de forma que os buracos deixados pelas tbuas que caram podem ser pulados com segurana.

No local onde Pedrinho se encontra existe uma placa mostrando as ligaoes entre as pontes e tambm quantas tbuas estao faltando em cada uma das pontes. Pedrinho est cansado e nao h muita visibilidade durante a noite. Ele precisa, portanto, tomar muito cuidado para nao cair em algum dos buracos. Pedrinho possui um laptop na mochila, mas s o usa para comunicar-se com os amigos. Ele liga sua internet via satlite, encontra voce on-line, e pede sua ajuda.

Tarefa
Sua tarefa escrever um programa que receba as informaoes sobre as pontes (as ligaoes entre elas e a quantidade de tbuas faltando em cada uma) e calcule qual o menor nmero de buracos que Pedrinho precisa pular para chegar ao outro lado do desfiladeiro.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois nmeros inteiros N e M (1 <= N <= 1.000, 2 <= M <= 10.000) representando o nmero de pilares no desfiladeiro e o nmero de pontes, respectivamente. Cada uma das M linhas seguintes contm 3 inteiros S, T, B (0 <= S <= N + 1, 0 <= T <= N + 1 e 0 <= B <= 1.000), indicando que existe uma ponte ligando os pilares S e T, e que possui B buracos. Nao existe linha representando ponte com S = T. O valor de pilar 0 representa a borda do desfiladeiro onde Pedrinho est, e o valor de pilar N + 1 representa a borda do desfiladeiro onde est o acampamento. Nao existem duas pontes distintas ligando o mesmo par de locais (pilares ou bordas do desfiladeiro). Voce pode supor que sempre existir um caminho de pontes entre o lado do desfiladeiro em que Pedrinho se encontra at o lado do desfiladeiro onde est o acampamento.

Sada
Seu programa deve imprimir, na sada padrao, um nmero inteiro representando a menor quantidade de buracos que Pedrinho ter que pular para conseguir chegar ao acampamento.

Exemplos
Entrada 2 5 0 1 1 0 2 3 0 3 9 1 3 2 2 3 2 Sada 3 Entrada 4 9 0 1 1 0 3 4 0 4 2 1 2 5

1 2 3 3 4

5 5 4 5 5

3 5 2 5 8

Sada 4

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 1 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11650. Simulador
Problem code: SIMUL09
Um novo processador, denominado Faska, est sendo desenvolvido para a empresa SBC. Este novo processador tem apenas duas instruoes: inversao e soma, descritas a seguir. Inversao: dados dois endereos de memria X e Y , a operaao inverte(X,Y) inverte a posiao de palavras da memria de forma que a palavra no endereo X troca de posiao com a palavra de memria da posiao Y; a palavra no endereo X + 1 troca de posiao com a palavra de memria da posiao Y - 1; a palavra no endereo X + 2 troca de posiao com a palavra de memria da posiao Y - 2; e assim por diante, at que X >= Y. Soma: dados dois endereos de memria X e Y, a operaao soma(X,Y) imprime a soma das palavras de memria entre os endereos X e Y (inclusive). Por exemplo, se a memria contm inicialmente, a partir da primeira posiao de memria (endereo igual a 1) os valores [1,2,3,4,5,6,7,8], a operaao inverte(3,7) deixa a memria igual a [1,2,7,6,5,4,3,8]. Entao, nesse estado, a execuao de soma(1,3) produz a sada 10.

Tarefa
Sua tarefa escever um programa que, dada uma sequencia de instruoes do Faska, simule a execuao e produza o mesmo resultado que o Faska produziria.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois nmeros inteiros N e M, representando respectivamente o nmero palavras na memria (1 <= N <= 10 9 ) e o nmero de instruoes do programa (1 <= M <= 1000). Cada uma das M linhas seguintes contm uma instruao do Faska. Cada instruao composta de um caratere descrevendo a instruao (I para inversao e S para soma), seguido de um espao, seguido de dois inteiros indicando os argumentos da instruao. Inicialmente a configuraao da memria tal que cada palavra tem como contedo o seu prprio endereo. Em outras palavras, o contedo inicial da memria [1,2,3,. . .,N]. H pelo menos uma instruao soma em cada caso de teste.

Sada
Seu programa deve imprimir, na sada padrao, uma sequencia de nmeros inteiros, um em cada linha, indicando a sada gerada pelo Faska.

Exemplos
Entrada 10 2 I 1 5 S 3 7 Sada 19 Entrada 15 4 S 2 11 I 10 15 I 1 10 S 5 10 Sada 65 21

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 2s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11651. Banda
Problem code: BANDA09
Jimmy um garoto muito esperto que adora msica. No ltimo mes ele ganhou um campeonato de um jogo cujo objetivo tocar guitarra. Empolgado, Jimmy decidiu montar uma banda. Para Jimmy a banda perfeita tem quatro integrantes, ele e mais tres: um baterista, um baixista e um cantor. Agora Jimmy precisa encontrar os outros integrantes da banda. Para isto ele reuniu todos os lbums que encontrou na internet e, aps escut-los diversas vezes, compilou o que ele chama de lista de entrosamento entre msicos. Nessa lista ele atribui, para cada par de msicos que j tocaram juntos, uma nota inteira de 1 a 100, que uma medida de quao bem os msicos tocam juntos (o nvel de entrosamento entre eles). Se dois msicos nunca tocaram juntos o nvel de entrosamento zero. Jimmy nunca tocou com nenhum msico da lista. Jimmy pretende formar a sua banda a partir da lista de entrosamento entre msicos, da seguinte maneira: ele quer escolher os outros tres msicos de tal forma que a soma dos nveis de entrosamento dos integrantes da banda seja a maior possvel (ou seja, a soma dos nveis de entrosamento dos tres pares possveis de serem formados entre os tres novos integrantes seja a maior possvel). Mas a lista de entrosamento entre msicos ficou muito grande e Jimmy nao est conseguindo escolher os integrantes. Por isso, Jimmy est pedindo sua ajuda.

Tarefa
Voce deve ajudar Jimmy a montar a melhor banda possvel fazendo um programa que receba uma lista contendo o nvel de entrosamento para cada par de msicos que j tocaram junto, e determine os msicos que formariam a melhor banda.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada formada por dois inteiros N e M, informando respectivamente o nmero de msicos (3 <= N <= 100) e o nmero de pares de msicos que j tocaram juntos (0 <= M <= 10 4 ). Os msicos sao identificados por nmeros inteiros de 1 a N. Cada uma das M linhas seguintes contm tres inteiros X, Y e Z, em que X e Y representa um par de msicos (1 <= X <= N, 1 <= Y <= N e X != Y ) e Z representa o seu nvel de entrosamento (1 <= Z <= 100). Cada par de msicos que j tocou junto aparece uma nica vez na entrada.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo tres nmeros inteiros separados por espao em branco, identificando os tres outros msicos que devem compor a banda (em qualquer ordem). Se existir mais de uma melhor banda, Jimmy contenta-se com qualquer uma.

Exemplos
Entrada 3 3 1 2 50 2 3 27 3 1 1 Sada 1 2 3 Entrada 5 8 1 2 50 1 3 50 1 4 50 2 3 50 2 5 10 3 4 50 3 5 25 4 5 20 Sada 1 3 4

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel 1 e 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11654. Cadeiras do auditrio


Problem code: CADEIR09
As cadeiras do auditrio da escola sao organizadas em um quadriculado com L linhas e C colunas. As linhas sao numeradas de 1 a L, as colunas sao numeradas de 1 a C, e as cadeiras sao numeradas de 1 a L C, de tal modo que uma cadeira na linha i coluna j tem o nmero (i - 1) C + j. Durante a aula de teatro, a professora fez com que os alunos executassem uma sequencia de mudanas na configuraao da sala. Cada uma dessas mudanas intercambiou ou duas colunas ou duas linhas. A figura abaixo ilustra uma configuraao original com tres linhas e quatro colunas, a posiao das cadeiras aps uma mudana (intercmbio das colunas 1 e 4), e a posiao das cadeiras aps mais uma mudana (intercmbio das linhas 2 e 3).

Ao final da aula, como era de se esperar, a numeraao das cadeiras ficou bem bagunada. O problema que a prxima aula de Matemtica, e o professor muito exigente, e quer comear a aula com as cadeiras perfeitamente posicionadas da maneira original.

Tarefa
Sua tarefa escrever um programa que, dada a posiao de cada cadeira ao final da aula de teatro, determine qual a menor sequencia de mudanas que devem ser executadas para retornar as cadeiras aos seus devidos lugares, considerando que cada mudana faa o intercmbio ou de duas linhas ou de duas colunas de cadeiras.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois nmeros inteiros L e C, representando respectivamente o nmero de linhas e o nmero de colunas de cadeiras do auditrio (1 <= L <= 200 e 1 <= C <= 200). Cada uma das L linhas seguintes contm C nmeros inteiros entre 1 e L C, separados por um espao em branco, indicando a posiao das cadeiras ao final da aula de teatro. O j-simo nmero dado na linha i o nmero da cadeira que se encontra na linha i e coluna j.

Sada
Seu programa deve imprimir, na sada padrao, na primeira linha um inteiro K representando o nmero de mudanas necessrias para retornar as cadeiras para sua posiao original. Cada uma das K linhas seguintes contm a descriao de uma mudana, na forma de um caractere M (que pode ser L ou C), seguido de um espao em branco, seguido de um inteiro X, seguido de um espao em branco, seguido de um inteiro Y. Se o caractere descrevendo a mudana L, X e Y representam linhas que devem ser intercambiadas; se o caractere descrevendo a mudana C, X e Y representam colunas que devem ser intercambiadas. Para todos os casos testes existe soluao com K <= 1000. Se mais de uma soluao existe com o mesmo nmero de mudanas, imprima qualquer uma delas.

Exemplos
Entrada 2 2 4 3 2 1 Sada 2 L 1 2 C 1 2 Entrada 3 4 1 2 3 4 5 6 7 8 9 10 11 12 Sada 0

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

11675. Olimpadas
Problem code: OLIMPJ09
O Comite Olmpico Internacional (COI) est visitando as cidades candidatas a sediar as Olimpadas de 2016. O Rio de Janeiro uma das cidades concorrentes, mas a competiao muito acirrada. O COI tem um conjunto de exigencias que devem ser obedecidas pelas cidades candidatas, como boas arenas para os jogos (ginsios, campos de futebol, pistas de atletismo, parque aqutico,...), bons alojamentos, um plano para o trfego de veculos durante os jogos, etc. Durante sua visita ao Rio de Janeiro, o COI colocou ainda mais uma exigencia: a demonstraao da qualidade dos sistemas de informtica. Especificamente, o COI quer que a organizaao local demonstre a sua capacidade em informtica produzindo um programa que gere a classificaao final dos pases, considerando o nmero total de medalhas recebidas pelos atletas de cada pas.

Tarefa
Sua tarefa escrever um programa que, dada a informaao dos pases que receberam medalhas de ouro, prata e bronze em cada modalidade, gere a lista de classificaao dos pases na competiao. Nesta tarefa, os pases serao identificados por nmeros inteiros. O melhor colocado deve ser o pas que conseguiu o maior nmero de medalhas, independentemente do tipo da medalha (ouro, prata ou bronze). Se houver empate entre dois pases no nmero total de medalhas, o melhor classificado o pas que tem o menor numero de identificaao.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois nmeros inteiros N e M, separados por um espao em branco, indicando respectivamente o nmero de pases (1 <= N <= 100) e nmero de modalidades esportivas envolvidas na competiao (1 <= M <= 100). Os pases sao identificados por nmeros inteiros de 1 a N. Cada uma das M linhas seguintes contm tres nmeros inteiros O, P e B, separados por um espao em branco, representando os pases cujos atletas receberam respectivamente medalhas de ouro (1 <= O <= N), prata (1 <= P <= N) e bronze (1 <= B <= N). Assim, se uma das M linhas contm os nmeros 3 2 1, significa que nessa modalidade a medalha de ouro foi ganha pelo pas 3, a de prata pelo pas 2 e a de bronze pelo pas 1.

Sada
Seu programa deve imprimir, na sada padrao, uma linha contendo N nmeros, separados por um espao em branco, representando os pases na ordem decrescente de classificaao (o primeiro nmero representa o pas que o primeiro colocado, o segundo nmero representa o pas que o segundo colocado, e assim por diante).

Exemplos
Entrada 2 2 2 1 2 1 2 2 Sada 2 1 Entrada 4 3 3 2 1 4 3 1 4 3 1 Sada 1 3 4 2 Entrada 3 3 3 1 2 2 3 1 1 2 3 Sada 1 2 3

Added by: Wanderley Guimares Date: 2012-06-03 Time limit: 1s Source limit:50000B Languages: All except: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL Resource: OBI 2009 - fase 2 nvel jnior

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12928. Labirinto
Problem code: LAB07
Um amigo seu est muito empolgado com um novo joguinho que baixou em seu celular. O jogo consiste em uma espcie de labirinto que pode ser representado por um quadriculado de clulas quadradas com N linhas e M colunas. Cada clula do labirinto contm uma plataforma que est a uma determinada altura do chao, que pode ser representada por um inteiro a que varia de 0 (a mais baixa) a 9 (a mais alta). Voce inicia na clula (1, 1) (canto superior esquerdo) e o objetivo chegar na sada do labirinto que fica na clula (N, M) (canto inferior direito). Para sair do labirinto, voce deve fazer movimentos entre clulas adjacentes. O problema que seu bonequinho nao consegue pular muito alto, entao se a clula destino estiver duas ou mais unidades acima da sua altura atual, voce nao consegue move-lo. Mais especificamente, a cada turno voce pode mover para uma das 4 clulas adjacentes (cima, baixo, direita, esquerda) caso a altura da clula destino seja menor ou igual a altura da sua clula atual mais uma unidade. Ou seja, se a altura da sua clula for A, voce s pode mover a uma clula adjacente caso a altura dela seja menor ou igual a A + 1. Para complicar um pouco mais o jogo, a cada turno, aps o jogador realizar sua aao, cada clula aumenta em uma unidade sua altura, at o valor mximo de 9. Caso a altura de uma determinada clula seja 9, ela passa a ser 0. Note que, em um dado turno, o jogador nao obrigado a se mover, ele pode simplesmente esperar as plataformas subirem ou descerem. Alm disso, repare que nem todas as clulas tem 4 vizinhos, uma vez que nao permitido ao jogador se mover para fora dos limites do labirinto. Voce, como bom programador que , resolve escrever um programa que calcule a menor quantidade de turnos possvel para chegar a sada de um dado labirinto.

Tarefa
Escreva um programa que, dado um labirinto, retorne a menor quantidade de turnos necessria para chegar a sada, de acordo com as restrioes dadas.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm dois inteiros N e M (2 <= N, M <= 50) separados por um espao em branco, que representam, respectivamente, a quantidade de linhas e colunas do labirinto. As N linhas seguintes contem, cada uma, M inteiros que representam a altura inicial (no turno 0) da respectiva plataforma. As alturas estao sempre entre 0 e 9 (inclusive).

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo a menor quantidade de turnos possvel para sair do labirinto.

Exemplos
Entrada: 4 3 0 0 0 0 0 0 0 0 0 0 0 0 Sada: 5 Entrada: 3 3 1 2 3 4 5 6 7 8 9 Sada: 12 Entrada: 3 5 1 3 1 1 1 1 3 1 3 1 1 1 1 3 1 Sada: 10

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-06 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2007 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12930. Pizza
Problem code: PIZZA07
Rodrigo pediu uma pizza de mussarela de N fatias, uma parte somente com cebola e o resto somente com azeitonas. Entretanto, ao receber a pizza em casa, notou que o motoqueiro que a entregou nao foi cuidadoso o suficiente, pois tanto as tiras de cebola quanto as azeitonas estavam espalhadas por toda a pizza. Para piorar, como a pizza era de mussarela, as tiras de cebola e as azeitonas estavam grudadas na pizza. Como gosta mais de cebola do que de azeitona, Rodrigo deseja pegar fatias consecutivas da pizza de tal forma que estas contenham a maior diferena possvel entre tiras de cebola e azeitonas. Para isso, ele contou quantas tiras e quantas azeitonas tinham em cada fatia e subtraiu os dois valores, nessa ordem. Assim, sempre que uma fatia contiver mais cebolas que azeitonas, ela recebe um nmero positivo, e caso contrrio, um nmero negativo. Uma fatia cujo nmero seja zero contm o mesmo nmero de tiras de cebolas e azeitonas. Por exemplo, supondo que as fatias contenham as seguintes diferenas: 5, -3, -3, 2, -1, 3, pode-se pegar uma fatia consecutiva com 9 cebolas a mais que azeitonas, utilizando as fatias com as diferenas 2, -1, 3, 5 (lembre-se de que estamos tratando de um crculo e, portanto, a fatia com diferena 5 vizinha da fatia com diferena 3 e vice-versa). Como Rodrigo nao entende de programaao, ele resolveu contar com seus servios. OBS: repare que melhor nao escolher nenhuma fatia caso somente seja possvel escolher fatias consecutivas com mais azeitonas que cebolas.

Tarefa
Escreva um programa que, dados as diferenas entre as quantidades de cebolas e azeitonas em cada fatia de pizza, retorne a maior quantidade possvel de cebolas que Rodrigo pode comer a mais do que a quantidade de azeitonas utilizando somente fatias consecutivas de pizza. (lembrando que a primeira fatia adjacente a ltima e vice-versa).

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm um inteiro N que indica o nmero de fatias de pizza (1 <= N <= 100.000). A segunda linha contm N inteiros K (-100 <= K <= 100) separados por um espao em branco com as diferenas entre as quantidades de cebolas e de azeitonas.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo a maior quantidade de cebolas que Rodrigo pode comer a mais do que azeitonas.

Exemplos
Entrada: 6 5 -3 -3 2 -1 3 Sada: 9 Entrada: 7 1 -2 2 -1 4 1 -5 Sada: 6 Entrada: 2 -3 -10 Sada: 0

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-06 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2007 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12937. Penalidade mnima


Problem code: PENAL06
A Sra. Bastos uma elaboradora de passatempos matemticos e pediu para que voce criasse um programa que conseguisse jogar de forma eficiente a sua mais nova criaao. O jogo consiste em um tabuleiro formado por casas dispostas em N linhas por N colunas. Cada casa contm um inteiro nao-negativo. No comeo do jogo, uma pea colocada na casa localizada no canto superior esquerdo, ou seja, na posiao (1,1). O objetivo do jogo mover a pea at a casa localizada no canto inferior direito (posiao (N,N)) somente movendo um nico quadrado para baixo ou para a direita em cada passo. Alm disso, a pea nao pode ser colocada em nenhum quadrado que contenha o nmero zero. O custo do caminho utilizado para percorrer o tabuleiro corresponde ao produto de todos os nmeros das casas percorridos no caminho. A penalidade definida utilizando a representaao decimal do custo, sendo representada pelo nmero de dgitos zeros, contados da direita para a esquerda, antes do primeiro dgito diferente de zero. Por exemplo, um custo igual a 501000 tem penalidade 3, e um custo igual a 501 tem penalidade zero. O objetivo do jogo conseguir chegar a casa (N,N) atravs de um caminho "otimizado". Dizemos que o caminho foi otimizado se a penalidade for mnima.

Tarefa
Escreva um programa que, dado um tabuleiro, determine a penalidade do custo otimizado.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm um inteiro N que indica o nmero de linhas e colunas do tabuleiro (1 <= N <= 1000). As N linhas seguintes contem N inteiros I cada (1 <= I <= 1000000), que representam o valor da casa do tabuleiro naquela posiao. Existe pelo menos uma soluao possvel para todos os casos de teste.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo a penalidade do custo "otimizado".

Exemplos
Entrada: 3 1 2 3 4 5 6 7 8 9 Sada: 0 Entrada: 3 5 7 6 4 0 1 3 2 5 Sada: 1 Entrada: 4 1 3 0 0 0 8 2 25 6 5 0 3 0 15 7 4 Sada: 2

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-07 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2006 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12939. Po a metro
Problem code: PAO07
Pao a metro um tipo de sanduche gigante que uma excelente opao de lanche para torneios de programaao, embora a experiencia j tenha mostrado que o oferecimento de sanduiches pode gerar reclamaao dos competidores. Outro grande problema que algumas pessoas sao mais gulosas que outras e, dessa maneira, acabam pegando pedaos maiores que os pedaos dos outros. Para a final da OBI, a coordenaao estava pensando em providenciar pao a metro para os competidores, porm tais problemas os fizeram recuar na idia. Embora a idia tenha sido momentaneamente abandonada, uma idia simples surgiu: cortar previamente o pao em fatias de tamanho iguais e distribu-las entre as pessoas. O nico problema com tal idia que se o nmero de pessoas for muito grande, fica impraticvel ter apenas um pao. Por exemplo, se quisermos que 1.000 pessoas recebam 20 centmetros de sanduche, seria necessrio um sanduche de 20.000 centmetros, ou 200 metros! Algum levantou a seguinte hiptese: se houvessem N pessoas e fossem encomendados K sanduches de empresas diferentes, cada qual com uma determinada metragem (tamanho) Mi (1 <= i <= K), seria possvel retirar desses paes N fatias de mesmo tamanho, possivelmente sobrando partes nao utilizadas. A questao seria: qual o tamanho inteiro mximo que essas fatias poderao ter? Por exemplo, se tivermos K = 4, com os tamanhos (em centmetros) M1 = 120, M2 = 89, M3 = 230 e M4 = 177 e N = 10, podemos retirar N fatias iguais de tamanho mximo 57, pois assim conseguimos 2 fatias no primeiro pao, 1 no segundo, 4 no terceiro e 3 no quarto, totalizando as 10 fatias necessrias. Se tentarmos cortar fatias de tamanho 58, s ser possvel obter 3 fatias do terceiro pao, totalizando 9 e, portanto, 57 realmente o melhor que podemos obter. Note que nao podemos usar duas ou mais fatias menores de diferentes paes para formarmos uma fatia do tamanho selecionado. (ficaria muito deselegante dar um lanche recortado as pessoas).

Tarefa
Escreva um programa que, dados os tamanhos de pao disponveis (em centmetros) e a quantidade de pessoas a serem atendidas, retorne o tamanho inteiro mximo (em centmetros) da fatia que pode ser cortada de maneira a atender todas as pessoas.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm um inteiro N que indica a quantidade pessoas (1 <= N <= 10.000). A segunda linha contm um inteiro K (1 <= K <= 10.000) que a quantidade de sanduches disponvel. Na terceira linha h K inteiros M (1 <= M <= 10.000) separados por um espao em branco representando o tamanho de cada pao.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo o tamanho inteiro mximo da fatia que pode ser cortada.

Exemplos
Entrada: 10 4 120 89 230 177 Sada: 57 Entrada: 3 2 45 85 Sada: 42 Entrada: 7 7 100 98 99 505 102 97 101 Sada: 101

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-07 0.050s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2007 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12993. Auto Estrada


Problem code: AUTO08
Certas regioes resolveram o problema de trfego intenso com a construao de auto estradas, que sao estradas contendo em geral quatro ou mais pistas de rolagem em cada sentido, de forma que um nmero grande de carros possa passar sem que ocorram congestionamentos. O problema das auto estradas que, junto com os carros temos um aumento considervel de rudo nas imediaoes da pista, o que incomoda os moradores das regioes prximas. A GoTo engenharia, uma empresa do ramo de construao especializada em obras de estradas, encontrou uma soluao engenhosa para o problema: instalar grandes painis defletores de som de cada lado da auto estrada para tentar minimizar o rudo percebido pelos vizinhos. Os painis sao construdos em blocos contnuos de 10 metros lineares. A auto estrada tambm dividida em blocos de 10 metros de extensao, sendo cada bloco descrito por um cdigo, como definido abaixo: * P - Pista, trecho em linha reta sem curvas ou sadas. Deve-se instalar um painel de cada lado da auto estrada. * C - Curva, trecho em curva de 90 graus na auto estrada. Deve-se instalar dois painis de concreto do lado externo da curva; o outro lado fica sem painel instalado. * A - Acesso, trecho em linha reta no qual existe uma entrada ou uma sada a partir de um dos lados da auto estrada (mas nao do outro). Deve-se instalar um painel no lado onde nao existe o acesso. * D - Duplo acesso, trecho em linha reta no qual existem dois acessos (entradas ou sadas, em qualquer combinaao possvel), um de cada lado da rodovia. Nenhum painel deve ser instalado nesse bloco da auto estrada. Apesar de ser uma empresa formada por engenheiros, nenhum dos funcionrios da GoTo sabe programar, de forma que eles decidiram contrataram voce como consultor independente. Voce deve escrever um programa para, dado um mapa da auto estrada, determinar quantos painis defletores sao necessrios para cobrir toda a extensao dessa auto estrada.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha contm um inteiro C (1 <= C <= 10 6 ), indicando o comprimento da auto estrada, em blocos de 10 metros. A linha seguinte contem C caracteres, cada letra descrevendo um bloco de 10 metros da auto estrada, como definido acima.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha contendo um nmero inteiro, representando quantas unidades de painel sao necessrias para cobrir toda a extensao da auto estrada.

Exemplos
Entrada: 5 DAPCD Sada: 5 Entrada: 8 AACCAAPP Sada: 12 Entrada: 14 ADCCPPPPPAADCP Sada: 21

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-14 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2008 - fase 2 nvel 1, 2 e Jr.

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12994. Viagem Espacial


Problem code: VIAESP08
A empresa de jogos Sonyc est desenvolvendo um novo jogo de naves espaciais, chamado Space Traveller (Viajante Espacial). O objetivo do jogo viajar entre dois pontos sem colidir com nenhum asteride no caminho. Para o prottipo, voce foi contratado para implementar o programa responsvel por verificar se um tiro disparado pela nave atingiu um determinado asteride. Nessa primeira versao, os tiros disparados pela nave sao projeoes num plano 2D, formando uma linha reta infinita, e asterides sao circunferencias perfeitas. Para que um tiro efetivamente destrua qualquer asteride, ele deve tangenciar a circunferencia que define o asteride. Dada uma sequencia de tiros realizados pela nave e a localizaao de um asteride, voce deve dizer quantos tiros acertaram o asteride.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm quatro nmeros inteiros N, X C , Y C e R (1 <= N <= 1.000, 0 <= X C <= 1.000, 0 <= Y C <= 1.000, 1 <= R <= 1.000) indicando, respectivamente, o nmero de tiros, as duas coordenadas no plano do centro do asteride (X C , Y C ), e o raio do asteride. Em seguida haver N linhas, uma para cada tiro. Cada linha ter 4 inteiros X 1 , Y 1 , X 2 , Y 2 (0 <= X 1 , X 2 , Y 1 , Y 2 <= 1.000), representando duas coordenadas de pontos distintos da reta formada pela projeao do tiro.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo um inteiro, indicando quantos tiros atigiram o asteride.

Exemplos
Entrada: 2 10 10 5 10 1 10 3 4 11 4 10 Sada: 1

Entrada: 2 5 5 1 0 0 0 1 0 0 1 0 Sada: 0 Entrada: 3 6 4 2 1 4 2 4 1 5 6 4 0 0 6 1 Sada: 2

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-14 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2008 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12995. Cavalos
Problem code: CAVALO08
O jogo de xadrez como conhecido hoje foi inventado por volta do sculo XV, na Europa Medieval. Uma das suas peas mais interessantes o cavalo, que se movimenta e ataca outras peas conforme a figura abaixo:

Na figura, o smbolo * representa as posioes que o cavalo na casa central ataca. Existem vrios quebra-cabeas interessantes envolvendo os movimentos do cavalo; um deles pergunta quantos cavalos podem ser colocados em um tabuleiro M N de forma que nenhum par de cavalos se ataque:

A sua tarefa escrever um programa que, dados M e N, determina quantos cavalos podem ser colocados em um tabuleiro M N de forma que nenhum par de cavalos ataque-se simultaneamente.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira (e nica) linha da entrada contm dois inteiros, M e N, (1 <= M <= 1000, 1 <= N <= 1000) indicando, respectivamente, o nmero de linhas e o nmero de colunas do tabuleiro.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo um inteiro indicando o maior nmero de cavalos que podem ser colocados no tabuleiro sem que dois deles se ataquem.

Exemplos
Entrada: 5 3 Sada: 8 Entrada: 2 6 Sada: 8 Entrada: 1 4 Sada: 4

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-14 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2008 - fase 2 nvel 1

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12997. Chuva
Problem code: CHUVA08
A robtica causou uma grande revoluao nos processos industriais no mundo todo; atualmente, vrios tipos de robs sao usados na fabricaao de carros, equipamentos eletrnicos e at mesmo utenslios domsticos. Uma fbrica possui um rob de manutenao, que constantemente precisa ser deslocado entre setores diferentes para executar vrios servios. A movimentaao do rob feita por controle remoto: ele pode andar qualquer distncia, mas apenas nas quatro direoes cardeais (norte, sul, leste e oeste). Robs sao feitos de metal, e por isso ideal que eles evitem contato direto com a gua. Assim, em dias chuvosos, ideal que a trajetria do rob passe por dentro de galpoes, debaixo de marquises e toldos, etc. para evitar sua exposiao a chuva. A sua tarefa escrever um programa que, dadas as informaoes sobre as reas cobertas e ponto inicial e final do rob, determine uma trajetria para o rob que minimize a porao do trajeto feita sob chuva.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha da entrada contm quatro inteiros X i , Y i , X f e Y f (0 <= X i , Y i , X f , Y f <= 10 6 ), indicando, respectivamente, a posiao atual e a posiao final do rob -- o rob comea na posiao (X i , Y i ) e deve terminar na posiao (X f , Y f ). A linha seguinte da entrada contm um nico inteiro N (0 <= N <= 1000), indicando o nmero de reas cobertas na fbrica. Cada uma das N linhas seguintes contm quatro inteiros X 1 , Y 1 , X 2 e Y 2 (0 <= X 1 < X 2 <= 10 6 , 0 <= Y 1 < Y 2 <= 10 6 ), indicando uma regiao coberta. Uma regiao coberta um retngulo de lados paralelos aos eixos tal que (X 1 , Y 1 ) e (X 2 , Y 2 ) sao vrtices opostos do retngulo. Duas reas cobertas podem ter regioes comuns. O rob pode entrar e sair de uma rea coberta por qualquer ponto de seu permetro, e pode trafegar livremente dentro da rea coberta.

Sada
Seu programa deve imprimir, na sada padrao, uma nica linha, contendo um nmero inteiro indicando a menor distncia que o rob precisa percorrer sob chuva.

Exemplos
Entrada: 0 0 4 3 0 Sada: 7 Entrada: 2 5 5 0 1 0 0 1 5 Sada: 5 Entrada: 4 5 5 0 2 0 0 1 5 0 0 3 2 Sada: 5

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-14 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2008 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12998. Ortografia
Problem code: ORTOG08
Um servio de busca na Internet est preocupado com a crescente taxa de erros de ortografia de seus usurios, tornando mais difceis as buscas por palavras chaves, que constantemente contem erros de algumas letras, devidos a m digitaao ou m ortografia. O servio funciona com base num dicionrio de palavras. O usurio deve inserir uma palavra num campo de um formulrio; o servio entao procura esta palavra no dicionrio e retorna contedo que tenha relaao com a palavra. Para contornar o problema de ortografia, voce foi contratado para fazer um programa que tenta adivinhar qual palavra o usurio pretendia procurar, independente de haver erros de ortografia nela. Para este problema vamos definir a distncia entre duas palavras A e B como sendo o nmero de operaoes, descritas abaixo, necessrias para transformar A em B: 1. Retirar uma letra de A. 2. Adicionar uma letra a A, em qualquer posiao. 3. Trocar qualquer letra de A por outra letra, na mesma posiao. O servio de busca definiu que a palavra P fornecida pelo usurio pode se referir a uma palavra D do dicionrio se est a uma distncia de no mximo 2 de D. Exemplos: A palavra tu pode se referir a palavra do dicionrio tubo, realizando duas vezes a operaao 2. A palavra crto pode se referir a palavra do dicionrio corte, realizando uma vez a operaao 2 e uma vez a operaao 3. A palavra crto pode se referir a palavra do dicionrio curto, realizando uma vez a operaao 2. A palavra hortgrafea nao pode se referir a palavra do dicionrio ortografia. Voce deve escrever um programa que, dado um dicionrio de palavras, descubra para cada palavra fornecida pelo usurio a quais palavras do dicionrio ela pode se referir, nas condioes descritas acima.

Entrada
A entrada contm um nico conjunto de testes, que deve ser lido do dispositivo de entrada padrao (normalmente o teclado). A primeira linha contm 2 inteiros N, M, representando respectivamente o nmero de palavras contidas no dicionrio (1 <= N <= 1000) e o nmero de palavras a serem analisadas (1 <= M <= 100). Cada uma das N linhas seguintes conter uma palavra pertencente ao

dicionrio. Cada uma das M linhas seguintes conter uma palavra a ser analisada, fornecida pelo usurio. Cada palavra pode ter de 1 a 20 letras, contendo apenas letras de a a z, minsculas.

Sada
Seu programa deve imprimir, na sada padrao, M linhas, sendo uma linha para cada palavra fornecido pelo usurio. Cada linha deve conter todas palavras do dicionrio as quais a palavra fornecida pode se referir. No caso de haver mais de uma palavra em uma linha da resposta, elas devem ser separadas por um espao em branco, aparecendo na ordem que elas foram dadas na entrada, como pode ser visto no exemplo de sada abaixo. No caso de nao haver nenhuma palavra em uma linha da resposta, deixe-a em branco.

Exemplo
Entrada: 3 3 pato pateta caneca pat ccanecos pata Sada: pato pato pateta

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-14 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2008 - fase 2 nvel 2

(function() { var po = document.createElement(script); po.type = text/javascript; po.async = true; po.src = https://apis.google.com/js/plusone.js; var s = document.getElementsByTagName(script)[0]; s.parentNode.insertBefore(po, s); })();

SPOJ Problem Set (obi)

12999. Frete da Famlia Silva


Problem code: FRETE08
Houve uma determinada poca no planeta Terra em que a populaao estava grande demais, e determinadas medidas foram tomadas para sanar esse problema. Uma vez que as primeiras colnias j haviam se estabelecido no planeta Marte, todos os pases concordaram em mandar para l algumas pessoas. O presidente de Pizzalndia, Lagosta da Silva, era uma pessoa que valorizava a famlia, e decidiu que nao ia separar famlias em nome dessa atitude. Resolveu, entao, mandar uma famlia inteira para Marte. No caso, a dele mesmo, a famlia Silva, provavelmente a mais numerosa do planeta. Tal famlia estabeleceu-se em Marte sem problemas, ainda mais com novas invenoes que havia por l. Uma delas era a plula de nanicolina, substncia descoberta naquele planeta, prximo a uma regiao onde existem pedras voadoras, pedras macias e at pedras falantes. Lendas dizem que algum outro ser extra-terrestre depositou a nanicolina ali num passado distante, enquanto visitava o planeta. O efeito da plula de nanicolina a diminuiao de tamanho de quem a toma, por um determinado tempo. Tal plula foi, entao, produzida em escala industrial e hoje em dia distribuda pelos governos marcianos aos colonos que l residem. A famlia Silva, todos os anos, encontra-se em alguma das muitas colnias em Marte para celebrar o aniversrio da chegada deles ao planeta. O chefe da famlia quem sempre paga o transporte de todos. O transporte feito atravs de nibus-flutuadores fretados. Como todos podem tomar plulas da nanicolina e ficarem minsculos, podemos dizer que dentro de cada nibus-flutuador cabem infinitas pessoas, e que o efeito da plula vai durar durante toda a viagem. Assim, o preo de uma viagem de nibus-flutuador entre duas colnias nao depende do nmero de pessoas que viajam, sendo um preo fixo. Isso permite que algumas economias sejam feitas. Suponha que existam quatro colnias dos Silvas em Marte, ilustrados abaixo:

Os crculos representam as colnias, e as conexoes entre elas representam as estradas existentes. O nmero nas conexoes representa o preo de uma viagem de nibus-flutuador em qualquer direao. Ou seja, uma viagem da colnia A direto para a colnia C (ou de C para A), custa 5 moedas de silcio, nao importa o nmero de passageiros. Suponha que o grande encontro seja na colnia A. Se o chefe da famlia pagar o frete de B para A, de C para A e de D para A, vai acabar gastando 25 moedas. Mas uma coisa que poderia ser feita, tambm, : os Silvas das colnias B e D vao para a C. Da C, todos vao para a colnia A. Isso tudo teria um gasto de somente 10 moedas. Este ano o nmero de colnias dos Silvas aumentou muito em Marte, e o chefe da famlia est muito preocupado com o dinheiro que vai gastar para pagar todas as viagens. Entao ele contratou voce, que o melhor programador daquele planeta, a fazer um programa que recebe as informaoes a respeito das colnias, das estradas e dos fretes de nibus-flutuadores, e determine qual a menor quantidade de dinheiro necessria para custear o transporte de todos os Silvas para o encontro. O desespero do chefe da famlia tanto que ele nao se importa em qual colnia ser o encontro, desde que os custos sejam minimizados. Voce pode assumir que: Entre duas colnias diferentes existe no mximo uma estrada direta. Sempre existe um caminho (de uma ou mais estradas) entre quaisquer duas colnias.

Entrada
A entrada contm um nico teste, a ser lido da entrada padrao. A primeira linha contm dois inteiros: N e M (2 <= N <= 1000, 1 <= M <= 10.000), que representam, respectivamente, o nmero de colnias e o nmero de estradas existentes. Depois, seguem M linhas com 3 inteiros: P, Q e U (0 <= P, Q <= N - 1, 1 <= U <= 1000), indicando que existe uma estrada de mao dupla entre as colnias P e Q, cujo custo do frete de viagem entre essas duas colnias U moedas.

Sada
Seu programa deve imprimir, na sada padrao, um nico inteiro, representando o nmero mnimo de moedas necessrias para custear o transporte de todos os Silvas a colnia onde ser realizada o encontro.

Exemplos
Entradas: 4 6 0 1 10 0 2 5 0 3 10 1 2 3 1 3 4 2 3 2 Sada: 10

Entradas: 4 6 0 1 1 0 2 1 0 3 1 1 2 3 1 3 4 2 3 2 Sada: 3

Added by: Date: Time limit: Source limit: Cluster:

Wanderley Guimares 2012-12-14 1s 50000B

Cube (Intel Pentium G860 3GHz) All except: AWK CLOJ ERL F# GO JS NODEJS PERL 6 PYTH 3.2.3 n SCALA SED Languages: TCL Resource: OBI 2008 - fase 2 nvel 2

You might also like