Top Banner
III Maratona Mineira de Programac ¸˜ ao Caderno de Problemas – Competic ¸˜ ao Principal Vic ¸osa, 24 de Maio de 2014 Instru¸ oes: Este caderno cont´ em 12 problemas: as p´ aginas est˜ ao numeradas de 1 a 14, n˜ ao contando esta p ´ agina de rosto. Verifique se o caderno est´ a completo. Em todos os problemas, a entrada de seu programa deve ser lida da entrada padr˜ ao.A sa´ ıda deve ser escrita na sa´ ıda padr˜ ao.
15

III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

Jan 25, 2019

Download

Documents

vandiep
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de ProgramacaoCaderno de Problemas – Competicao Principal

Vicosa, 24 de Maio de 2014

Instrucoes:

• Este caderno contem 12 problemas: as paginas estao numeradas de 1 a 14, nao contandoesta pagina de rosto. Verifique se o caderno esta completo.

• Em todos os problemas, a entrada de seu programa deve ser lida da entrada padrao. Asaıda deve ser escrita na saıda padrao.

Page 2: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema A. Número de EddingtonArquivo-fonte: eddington.c, eddington.cpp ou eddington.java

Aplicativos para celular nas áreas de saúde e fitness estão na moda. Querendo abocanhar uma parte desse mercado, Joana,uma ávida ciclista, resolveu criar um app para ajudar outros ciclistas.

Para tornar o aplicativo mais interessante, vão ser incorporados alguns elementos de RPGs, incluindo achievements e níveisde experiência. Como nível de experiência de um ciclista, Joana decidiu usar o Número de Eddington.

O Número de Eddington de um ciclista é definido como o maior inteiroE tal que o ciclista pedalou pelo menosE quilômetrosem E dias diferentes. Um número de Eddington de 70, por exemplo, significa que em 70 dias diferentes, o ciclista pedalou70 ou mais quilômetros. Esse número é uma medida de progresso interessante porque fica cada vez mais difícil, dado quenem todos os dias que contaram para o nível N contam para o nível N + 1.

Joana está bastante ocupada com vários aspectos do aplicativo, e pediu sua ajuda. Dado o número de quilômetros percorridospor um ciclista por dia, para vários dias, calcule o número de Eddington desse ciclista.

EntradaA entrada possui múltiplos casos de teste. Cada caso de teste é dado em duas linhas. A primeira contém um único inteiroN , que representa o número de dias nos quais o ciclista pedalou (0 < N < 1000). A segunda linha contém N inteirosa1, a2, . . . , an, onde ai é o número de quilômetros pedalados pelo ciclista no i-ésimo dia (0 ≤ ai ≤ 200).

A entrada termina quando N = 0.

SaídaPara cada caso de teste, imprima uma linha contendo um único inteiro E, que é o número de Eddington do ciclista.

ExemplosEntrada Saída

58 5 7 5 651 2 2 3 3101 2 3 4 5 6 7 8 9 10103 0 7 7 8 0 7 9 9 100

5257

Página 1 de 14

Page 3: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema B. Magos e DragõesArquivo-fonte: magosedragoes.c, magosedragoes.cpp ou magosedragoes.java

Em seus 2500 anos de vida, Merlin aprendeu uma grande quantidade de feitiços poderosos. Dessa forma, ele se tornouapto a enfrentar um terrível dragão que está destruindo o reino. Entretanto, Merlin conhece tantos feitiços que a tarefa deescolher quais serão usados em uma eventual batalha se tornou bastante árdua. Por isso, ele pediu que você o ajudasse aescolher quais magias utilizar em um eventual confronto contra o dragão.

Em um confronto, um mago deve invocar exatamente K feitiços, nem mais, nem menos. Merlin conhece N feitiços. Cadafeitiço tem um poder representado por um valor inteiro Fi. Todos os feitiços possuem poderes diferentes, i.e., não há doisfeitiços com exatamente o mesmo poder. O valor do ataque do mago será o produto dos poderes dos K feitiços escolhidos.Como o dragão é muito forte, Merlin pretende utilizar a combinação de feitiços que irá lhe dar o maior ataque possível.Dado K , sua tarefa é informar quais feitiços Merlin deve utilizar em seu confronto. Tome muito cuidado! Magia é algo muitoperigoso. Existem feitiços malígnos com poder negativo (Fi < 0).

Note que podem existir mais de um conjunto de feitiços que gerem um ataque máximo. Nesse caso, Merlin deseja aquelecuja soma dos Fi é máxima.

EntradaHá múltiplos casos de teste. Cada caso de testes é dado em duas linhas.

Na primeira linhas são dados N (1 ≤ N ≤ 105) e K (1 ≤ K ≤ N ), que indicam, respectivamente, o número de feitiçosque Merlin conhece e o número de feitiços que Merlin irá usar em seu confronto. Na segunda linha temos N inteiros únicosFi, indicando a força do i-ésimo feitiço (−106 ≤ Fi ≤ 106). Se i = j, então Fi = Fj , para todo i e j.

A entrada termina quando N = K = 0.

SaídaPara cada caso de testes, imprima uma linha contendo K inteiros indicando os poderes Fi das magias que serão usados.Essa lista deve estar em ordem crescente.

ExemplosEntrada Saída

3 2-1 3 52 11 24 2-3 -4 3 20 0

3 52-4 -3

Página 2 de 14

Page 4: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema C. A IlhaArquivo-fonte: ilha.c, ilha.cpp ou ilha.java

Ana está desenvolvendo um jogo para celulares e tablets que é baseado no aquecimento global. No universo do jogo, o níveldo mar está subindo de maneira extraordinariamente rápida. O jogador começa em uma ilha, e deve resgatar seus amigose fugir da ilha antes que ela seja inteiramente engolida pelo mar.

Essa ilha é representada como um grid quadrado de n× n células. Cada célula é um quadrado de 1 metro de lado, e possuiuma altura em relação ao nível original do mar que é dada por um número inteiro de metros.

O jogo ocorre em turnos. No primeiro turno, o mar está no nível zero. Sempre que há uma mudança de turno, o nível domar sobe em 1 metro. Quando o nível do mar sobe, uma célula é alagada se (e somente se) a altura dela é menor ou igualao novo nível do mar e ela é adjacente ao mar ou a uma célula alagada. Quando uma célula é alagada, células vizinhas quetambém estejam a uma altura menor ou igual ao nível atual do mar também serão alagadas, instantaneamente. Você podeconsiderar que a alteração no nível do mar (e o alagamento resultante) acontece de forma instantânea entre os turnos, i.e.,após o fim do turno anterior mas antes do início do turno atual.

Ana recentemente terminou a primeira versão beta do jogo, e a distribuiu a alguns amigos para que eles o testassem. Algumaspessoas reclamaram que, em alguns mapas, o nível do mar sobe de maneira tal que em poucos turnos quase não há maisárea não-alagada, e o jogo se torna muito difícil (ou impossível) de ganhar.

Ela está trabalhando arduamente em resolver o problema, mas precisa de uma forma de testar se as soluções que elaestá implementando realmente funcionam. Por isso, ela pediu a sua ajuda. Dado um mapa, calcule qual é a área (em m2)não-submersa da ilha no turno T .

ObservaçõesDuas células do grid são adjacentes se e somente se elas compartilham uma aresta. Uma célula pode ter de 2 a 4 vizinhos(norte, sul, leste e oeste), sendo que apenas células da borda possuem menos do que 4 vizinhos.

EntradaHá múltiplos casos de teste. Cada caso de teste começa com uma linha contendo dois inteiros N (0 < N ≤ 1024) e T . Ailha do jogo é um quadrado de N metros de lado, subdividido em N2 células de 1 metro quadrado cada. Você deve calculara área não submersa da ilha no turno T (1 ≤ T ≤ 255).

Em seguida, há N linhas, cada uma das quais contendo N inteiros, que representam a altura em metros de cada uma dascélulas. Essa altura é um inteiro entre 1 e 255 (inclusive).

A entrada termina quando N = T = 0.

SaídaPara cada caso de teste, imprima uma linha contendo um único inteiro A, que é a área não-submersa da ilha após T turnos,em metros quadrados.

ExemplosEntrada Saída

10 21 1 1 1 1 1 1 1 1 11 2 2 2 2 2 2 2 2 11 2 1 1 1 1 1 1 2 11 2 1 3 3 3 1 1 2 11 2 1 3 1 3 1 1 2 11 2 1 3 3 3 1 1 2 11 2 1 1 1 1 1 1 2 11 2 1 1 1 1 1 1 2 11 2 2 2 2 2 2 2 2 11 1 1 1 1 1 1 1 1 10 0

64

No primeiro turno, o nível do mar é zero, e toda a ilha está acima dele. No segundo turno, o nível do mar passa a ser 1metro, e todas as 36 células de altura 1 na borda da ilha são alagadas. Há outras células de altura 1 na ilha, mas elas não sãoalagadas porque estão protegidas do mar por “paredes” mais altas.

Página 3 de 14

Page 5: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema D. Economizando SMSArquivo-fonte: sms.c, sms.cpp ou sms.java

Lorena e Gustavo conversam muito por SMS e perceberam que estão gastando muito dinheiro com isso. A operadora deLorena cobra L centavos por SMS e a de Gustavo cobra G centavos por SMS. Eles têm o histórico de mensagens armazenado.No histórico, cada mensagem é da forma:

<Remetente>:<Texto>

onde <Remetente> é quem mandou a mensagem (i.e. Lorena ou Gustavo) e <Texto> é o conteúdo da mensagem. Umexemplo de histórico é:

Gustavo:Oi Lorena.Gustavo:Tudo bem?Lorena:Oi. Tudo bem.Lorena:E com você?Gustavo:Tudo.

Eles perceberam que uma mesma pessoa mandava várias mensagens em sequência, quando poderia mandar todo o conteúdoem uma única mensagem e economizar. Na conversa acima, seria possível que Gustavo economizasse G centavos e LorenaL centavos se eles tivessem feito da seguinte forma:

Gustavo:Oi Lorena. Tudo bem?Lorena:Oi. Tudo bem. E com você?Gustavo:Tudo.

Dados o histórico de mensagens e as tarifas L e G, determine o máximo que cada um dos dois poderia ter economizado.

Observações

• Para agrupar duas mensagens consecutivas, é necessário inserir um espaço entre elas. Então, se haviam duas mensagensde tamanhos 10 e 12, então a mensagem agrupada que contém o conteúdo das duas tem tamanho 23 (10 da primeira,um do espaço, 12 da segunda) e não 22.

• Uma mensagem SMS pode possuir no máximo 160 caracteres.

• É possível juntar várias mensagens em uma. Mas não é possível quebrar uma mensagem em várias.

• A ordem das mensagens não pode ser alterada.

EntradaCada caso de teste começa com uma linha contendo três inteiros N , L e G, que representam respectivamente o númerode mensagens (0 < N < 4096), e os valores em centavos que as operadoras de Lorena (L) e Gustavo (G) cobram por cadamensagem SMS (0 < L,G < 81).

Em seguida, há N linhas, cada uma no formato <Remetente>:<Texto>, onde <Remetente> é ou Gustavo ou Lorena, e<Texto> é o texto da mensagem, que possui no mínimo 1 e no máximo 160 caracteres. Note que não existe espaço entreos : e o início do texto da mensagem.

A entrada termina quando N = L = G = 0.

SaídaPara cada caso de teste, imprima uma linha contendo dois números EL e EG, que representam o número total de centavosque Lorena e Gustavo, respectivamente, poderiam ter economizado agrupando mensagens consecutivas.

Página 4 de 14

Page 6: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

ExemplosEntrada

5 10 9Gustavo:Oi Lorena.Gustavo:Tudo bem?Lorena:Oi. Tudo bem.Lorena:E com você?Gustavo:Tudo.4 8 8Gustavo:Essa e uma mensagem meio grande, com muitos caracteres.Gustavo:Essa mensagem tambem eh relativamente grande.Gustavo:Quando elas forem agrupadas, o limite vai estourar.Gustavo:Entao voce precisa lembrar com cuidado de tratar isso.3 6 14Gustavo:Oi Lorena.Gustavo:Você acha que esse cara vai conseguir fazer esse problema?Lorena:Ah...não sei.0 0 0

Saída10 90 160 14

Página 5 de 14

Page 7: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema E. Comparando HotéisArquivo-fonte: hoteis.c, hoteis.cpp ou hoteis.java

João é dono de um website que auxilia pessoas a organizarem viagens, e precisa de sua ajuda para desenvolver um novomódulo que torne mais simples escolher hotéis.

Cidades turísticas normalmente possuem um número grande de hotéis. Algumas chegam a ter literalmente milhares deles.É praticamente impossível para uma pessoa comparar todos eles. Ao escolher hotéis, usamos alguns critérios. Por exemplo,numa cidade litorânea, podemos estar interessados em distância até à praia, preço, e qualidade (número de estrelas). Consideretrês hotéis hipotéticos:

• Hotel A: a 200 metros da praia, R$ 160,00 a diária, 4 estrelas;

• Hotel B: a 400 metros da praia, R$ 160,00 a diária, 3 estrelas;

• Hotel C: a 100 metros da praia, R$ 560,00 a diária, 5 estrelas.

Nesse exemplo, o Hotel B é igual-ou-pior ao Hotel A em todos os aspectos: é mais longe da praia, tem o mesmo preço,e menor qualidade. Então, nesse caso, certamente o Hotel A é uma escolha melhor que o Hotel B; o B nem precisa sermostrado ao usuário. Já o Hotel C é melhor que o A em dois aspectos (mais próximo à praia, melhor qualidade) e pior emum (preço). Assim, não é possível afirmar a priori que ele é melhor ou pior que o Hotel A. O usuário precisa decidir entreos dois, dependendo do que acha mais importante.

Ou seja: um hotel X pode ser removido da lista que é mostrada ao usuário desde que exista um outro hotel Y tal que Yé melhor que X em pelo menos um aspecto, e melhor ou igual a X em todos os outros. Quando essa condição vale, nósdizemos que o hotel X é dominado pelo hotel Y.

Sua tarefa é fazer essa análise: dada uma lista de hotéis, e suas características, remova da lista todos os hotéis que sãodominados por algum outro hotel da lista.

EntradaA entrada possui múltiplos casos de teste. Cada caso de teste começa com uma linha contendo um único inteiro N , querepresenta o número de hotéis (0 < N ≤ 1000).

Em seguida, há N linhas, cada uma das quais descreve um hotel. Essas linhas possuem 4 campos. O primeiro é o nome dohotel, que é uma string que possui entre 1 e 20 caracteres (inclusive), que podem ser apenas letras (minúsculas ou maiúsculas),dígitos ou hífen (-). Os próximos três campos são inteiros D, P e Q, que representam a distância à praia, preço e qualidade.

D é a distância a praia em metros (0 < D ≤ 4096, quanto menor a distância, melhor);P é o preço, em reais, da diária do hotel (0 < P ≤ 5000, quanto menor o preço, melhor);Q é a qualidade do hotel, em número de estrelas (0 < Q ≤ 5, quanto mais estrelas melhor).

A entrada termina com N = 0.

SaídaPara cada caso de teste, imprima o nome de todos os hotéis que não são dominados por nenhum outro hotel no mesmocaso de teste. Cada hotel deve ser impresso em uma linha separada, e eles devem ser impressos na mesma ordem em queaparecem na entrada. Após cada caso de teste (inclusive o último) imprima uma linha contendo um único asterisco (*).

ExemplosEntrada Saída

3HotelA 200 160 4HotelB 400 160 3HotelC 100 560 54hotel-03 100 300 5hotel-02 100 400 4hotel-01 900 100 3hotel-00 100 300 50

HotelAHotelC*hotel-03hotel-01hotel-00*

Página 6 de 14

Page 8: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema F. Ferrovia do Pão de QueijoArquivo-fonte: ferrovia.c, ferrovia.cpp ou ferrovia.java

Com a proximidade da Copa do Mundo, o governo estuda a possibilidade de construir um sistema de transporte ferroviárioentre algumas cidades de Minas: a Ferrovia do Pão de Queijo. O sistema tem o objetivo de garantir que o estoque de Pãode Queijo dos cafés do estado não se esgote durante a competição.

A ideia chamou a atenção de muitos mineiros, que inundaram o governo com várias propostas para a construção do sistema.Cada proposta contém uma lista de estações, cada qual descrita por um conjunto de linhas de trem.

Dizemos que duas dessas estações U e V estão conectadas se houver uma sequência de estações S1, ..., Sk tais queS1 = U, Sk = V e todo par de estações adjacentes (Si, Si+1) tem pelo menos uma linha de trem em comum. Umaproposta é dita conectada se todo par de estações da proposta for conectado.

É desejável que o Pão de Queijo possa fluir entre qualquer par de estações. Em função disso, o governo decidiu rejeitartodas as propostas de sistema de transporte que não forem conectadas. Nesse problema, você deve escrever um programaque identifica se uma proposta de sistema de transporte é conectada.

EntradaA entrada possui múltiplos casos de teste. Cada caso de teste começa com uma linha contendo dois inteiros N , K .

N é o número de estações de trem (1 ≤ N ≤ 105) K é o número de linhas de trem (1 ≤ K ≤ 10)

Em seguida, há N linhas contendo as linhas de trem que passam por cada estação. Cada uma dessas linhas começa com uminteiro ni que indica o número de linhas de trem da estação i (0 ≤ ni ≤ K). Em seguida, na mesma linha, há ni númerosinteiros distintos ei1, ..., eini , que indicam as linhas de trem que passam na estação i (1 ≤ eij ≤ K).

A entrada termina com N = K = 0.

SaídaPara cada caso de teste, imprima uma única linha contendo o caractere “S” caso o conjunto de estações de trem sejaconectado e o caractere “N” caso contrário. Os caracteres devem ser impressos em letras maiúsculas e sem aspas.

ExemplosEntrada Saída

5 103 8 7 63 6 8 73 7 8 63 6 7 83 8 6 76 53 4 2 32 5 12 4 32 5 12 4 32 1 50 0

SN

Página 7 de 14

Page 9: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema G. Números Par-PrimosArquivo-fonte: parprimo.c, parprimo.cpp ou parprimo.java

Pedro é um aluno muito bom em matemática e está estudando números primos. A professora de Pedro disse que os númerosinteiros primos são aqueles que possuem exatamente dois divisores. Muito curioso, Pedro começou a mudar a definiçãodada pela professora para ver o que aconteceria.

Inicialmente, Pedro estudou números com diferentes números de divisores, mas logo decidiu ser mais “meta” e estudarnúmeros cuja quantidade de divisores era par, definindo assim os números par-primos.

No momento Pedro está interessado em saber quantos números par-primos existem em vários intervalos. Sua tarefa écalcular esses valores e ajudar Pedro, para que ele possa se dedicar ao próximo desafio, números primo-primos!

EntradaHá no máximo 105 casos de teste. Cada caso de teste é dado por uma linha do arquivo de entrada. Cada linha do arquivocontém dois inteiros, a e b, que indicam o intervalo [a, b] a ser testado por números par-primo. Você pode supor que1 ≤ a ≤ b ≤ 1018.

A entrada termina quando a = b = 0.

SaídaPara cada caso de teste, imprima uma linha contendo a quantidade de números par-primos no intervalo correspondente.

ExemplosEntrada Saída

3 101 380 0

632

Página 8 de 14

Page 10: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema H. Tetris ExtremeArquivo-fonte: tetris.c, tetris.cpp ou tetris.java

No jogo individual Tetris, uma sequência aleatória de tetrominós cai do topo de uma grade de M linhas e N colunas. Cadatetrominó ocupa quatro posições na grade e tem um dos formatos abaixo. Chamamos cada uma dessas posições ocupadasde bloco.

1 2 3 4

5 6 7

O objetivo do jogo é posicionar os tetrominós de modo a formar linhas horizontais de N unidades de largura na grade. Essaslinhas desaparecem assim que são formadas, fazendo com que todos os blocos acima delas caiam. Para formá-las, é possívelmover os tetrominós para os lados ou rotacioná-los 90 graus em qualquer direção durante a queda. Cada linha formada valeum ponto.

A figura abaixo mostra uma grade com um tetrominó que acaba de começar a cair.

Algumas variantes do jogo tetris incorporam funções especiais. Uma dessas funções é conhecida como gravidade. Quandoa gravidade é acionada, todos os tetrominós e pedaços de tetrominós na grade são divididos em seus blocos constituintes.Esses blocos caem em direção à base da grade, o que pode levar a formação de novas linhas e fazer com que o jogador ganhepontos. A figura abaixo mostra o que acontece se o jogador decidir usar a função gravidade na grade anterior. Primeiro ospedaços de tetrominós caem, formando duas linhas. Depois, essas linhas somem e os demais blocos caem, contabilizandodois pontos.

Saber usar a função gravidade é uma arte que poucos dominam. Em muitos casos, essa função leva a formação de gradescom colunas em branco como ocorreu no exemplo, e isso acaba dificultando o jogo.

Página 9 de 14

Page 11: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Nesse problema, você deve escrever um programa que compute o maior número de pontos que é possível fazer se o jogadorposicionar o tetrominó que está caindo de forma ótima (levando em conta translação e rotação) e, em seguida, utilizar afunção gravidade.

EntradaHá vários casos de teste. Cada caso de teste começa com uma linha contendo três inteiros M , N e K .

M e N indicam o número de linhas e de colunas da grade, respectivamente (5 ≤ M ≤ 50 e 4 ≤ N ≤ 100000). K indicaqual é o próximo tetrominó a cair. A numeração dos tetrominós é mostrada na primeira figura.

Em seguida, há M linhas com N caracteres “.” ou “#” em cada uma. O caractere “.” é utilizado para indicar um espaçoem branco. Já o caractere “#” indica uma posição preenchida por um bloco, que pode pertencer tanto a um tetrominócompleto quanto a um pedaço de tetrominó. Os casos de teste não contêm linhas inteiramente preenchidas nem blocosnas quatro primeiras linhas.

A entrada termina com M = N = K = 0.

SaídaPara cada caso de teste, imprima uma linha contendo um único número: a pontuação máxima que é possível conseguir se ojogador posicionar o o novo tetrominó na grade da melhor forma possível e, em seguida, acionar a função gravidade.

ExemplosEntrada Saída

22 12 7.............................................................................................................................................................................#...........#...........#...........#..###......##################.####...####.######.#####7 12 6.................................................###########.###########..##########0 0 0

23

No segundo exemplo, é possível conseguir 3 pontos rotacionando a peça 90 graus no sentido horário e movendo-a até ocanto esquerdo. Note que, em função da gravidade, não é necessário que a peça se encaixe completamente.

Página 10 de 14

Page 12: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema I. Corte de FaroArquivo-fonte: faro.c, faro.cpp ou faro.java

Entre mágicos e trapaceiros, é conhecido como o corte de Faro o seguinte procedimento: separar o deck de cartas nasmetades superiores e inferiores; intercalar as cartas das duas metades de forma que a primeira carta da metade inferior sejaseguida pela primeira carta da metade superior, seguida pela segunda da inferior e assim por diante.

Por exemplo, considere um baralho de 8 cartas, que são numeradas de 1 a 8, e começam em ordem crescente. Aplicandorepetidamente o corte de faro, temos:

Configuração inicial: 1, 2, 3, 4, 5, 6, 7, 8Após 1 corte de faro: 5, 1, 6, 2, 7, 3, 8, 4Após 2 cortes de faro: 7, 5, 3, 1, 8, 6, 4, 2Após 3 cortes de faro: 8, 7, 6, 5, 4, 3, 2, 1

Em decks de 52 cartas, oito repetições sucessivas do corte de Faro levam o baralho de volta à configuração inicial. Comoo processo que leva o corte de Faro é complicadíssimo, um mágico que quer aplicá-lo a baralhos de tamanho arbitrário lhecontratou para que desenvolva um programa que consiga dizer qual a posição em que uma carta específica do baralho seencontrará após vários cortes.

EntradaA entrada possui múltiplos casos de teste. Cada caso de teste é dado em uma linha contendo três inteiros N , C e I .

N é o número de cartas do baralho (0 < N ≤ 10000, N é sempre par).

C é a posição inicial da carta de interesse na configuração inicial do baralho. Por exemplo, se C = 3, então a carta deinteresse é a terceira carta a partir do topo do baralho. (1 ≤ C ≤ N ).

I é o número de repetições do corte de Faro que serão aplicadas ao baralho (0 < I ≤ 16384).

A entrada termina quando N = C = I = 0.

SaídaA posição da carta de interesse, em relação ao topo do baralho. As posições são contadas a partir de 1.

ExemplosEntrada Saída

52 3 852 3 1652 9 152 49 11000 512 10000 0 0

26311845457

Página 11 de 14

Page 13: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema J. PalíndromosArquivo-fonte: palindromos.c, palindromos.cpp ou palindromos.java

Um palíndromo é uma palavra que é lida da mesma maneira tanto da esquerda para a direita quanto da direita para a esquerda.Alguns exemplos de palíndromos são: arara, rodador e Mussum.

Dada uma palavra qualquer p, qual é o número mínimo de caracteres que precisam ser adicionados ao fim da palavra paraque ela se torne um palíndromo?

EntradaA entrada possui múltiplos casos de teste. Cada caso de teste é dado em uma linha, que contém uma única palavra p,composta apenas por letras minúsculas sem acento (a – z). Essa palavra possui no máximo 50 caracteres.

A entrada termina com o fim do arquivo.

SaídaPara cada caso de teste, imprima uma linha contendo um único inteiro N , que é o menor número de caracteres que precisamser adicionados ao fim da palavra para torná-la um palíndromo.

ExemplosEntrada Saída

araramussummaratonaaniliabcdefarar

007251

Arara e Mussum já são palíndromos. O menor palíndromo que começa com ”maratona”é ”maratonanotaram”, que possuisete caracteres a mais. Para ”anili”, porém, basta adicionar dois caracteres e formar ”anilina”.

Página 12 de 14

Page 14: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema K. Jogo dos NúmerosArquivo-fonte: numeros.c, numeros.cpp ou numeros.java

Kiko ganhou de sua mãe um presente, o Jogo dos Números. O jogo veio em uma caixa, e dentro da caixa há algumas peçasde madeira com um número escrito (não há números repetidos). Ele deve ser jogado por duas pessoas, por isto ele chamouseu melhor amigo, o Chaves. As regras são simples, cada um escolhe alguns números dentro da caixa (no mínimo 1 peça). Éóbvio que eles devem escolher peças distintas. O objetivo do jogo é que a soma dos números escolhidos por cada um sejaa mesma, por isto ou os dois ganham ou os dois perdem, é um jogo cooperativo!

Eles jogaram por várias horas e não conseguiram ganhar. Por isso, estão suspeitando de que o jogo está com defeito. Suatarefa aqui é, dado os números, responder se é possível que exista uma combinação onde os dois ganham!

EntradaHá múltiplos casos de teste. Cada caso de teste é dado em duas linhas. A primeira linha contém um inteiro N , que é onúmero de peças do jogo (2 ≤ N ≤ 1000). A segunda linha contém N inteiros a1, a2, . . . , aN , que são números escritosem cada uma das N peças. Você pode supor que 1 ≤ ai ≤ 106 para todo i, e que se i = j então ai = aj (i.e., não existempeças repetidas).

A entrada termina quando N = 0.

SaídaPara cada caso de teste, imprima uma linha contendo o caractere S se existir uma combinação que permita que Kiko eChaves ganhem o jogo, ou o caractere N caso contrário.

ExemplosEntrada

31 2 331 2 461 3 5 7 9 1310513 8612 4359 7784 7470 8399 1776 4471 8879 6302105024 579 6948 645 292 8522 9293 4463 976 4089106400 4160 2309 3175 1483 5261 7886 86 9433 4985108193 8898 1380 485 9287 2057 3271 6226 7060 57270

SaídaSNSNSNN

Página 13 de 14

Page 15: III Maratona Mineira de Programac¸ao˜maratona.algartelecom.com.br/anteriores/3mineira/prova.pdf · escolher quais magias utilizar em um eventual confronto contra o ... feitiços

III Maratona Mineira de Programação

Problema L. Rouba BandeiraArquivo-fonte: roubabandeira.c, roubabandeira.cpp ou roubabandeira.java

Um grupo de N crianças decidiu brincar de rouba bandeira. Para isso, elas precisam se separar em dois times com a mesmaquantidade de crianças. Porém, algumas delas são muito amigas e querem estar no mesmo time. Por outro lado, outrassão inimigas e não querem estar no mesmo time. Determine o número de formas de dividir os times satisfazendo todasessas restrições. Duas formas de dividir as crianças em times são consideradas diferentes se e somente se existe um parde crianças que são companheiras em uma das formas e adversárias na outra. Como a resposta pode ser muito grande,calcule-a mod 1.000.000.007.

EntradaHá múltiplos casos de teste.

A primeira linha de cada caso de teste contém três inteiros N , A e I (1 ≤ N ≤ 1000, 0 ≤ A, I ≤ n·(n−1)2 ), onde N

é o número de crianças, A é o número de relações de amizade e I é o número de relações de inimizade. A seguir, Alinhas descrevem as relações de amizade e I linhas descrevem as relações de inimizade. Uma relação de amizade/inimizadeé representada por um par de inteiros (p, q), tal que 1 ≤ p, q ≤ N , indicando que a relação existe entre as crianças p e q.

A entrada termina quando N = A = I = 0.

SaídaPara cada caso de teste, imprima uma linha contendo um único inteiro que representa o número de formas de dividir ostimes mod (109 + 7).

ExemplosEntrada Saída

2 0 04 0 04 1 21 21 32 43 0 0

1310

Página 14 de 14