1 VII MARATONA DE PROGRAMAÇÃO UERJ – 17/05/2014 Este

Propaganda
VII MARATONA DE PROGRAMAÇÃO UERJ – 17/05/2014
Este caderno contém 12 páginas com a descrição de 10 problemas1 definidos
a seguir:
A - Botas
B – Digito Verificador do passaporte
C – Jogo da Vida
D - A Próxima Permutação
E – Esperando na fila
F – Contágio
G – Os três cilindros
H – Mega-Sena
I – Colagem
J - Maiores e Menores
1. Resolva os problemas conforme orientação anterior.
2. Tenha muita atenção e calma.
Boa sorte.
1
Autoria de Paulo Eustáquio Duarte Pinto e Geovani Aliatti
1
Problema A
Botas
Em um depósito de botas usadas, os pés de botas estão todos misturados, de forma que não
se sabe quantos pares podem ser formados. Você vai ajudar a esclarecer quantos pares
existem nesse mistura de pés de botas, escrevendo um programa para tal fim.
Entrada
Haverá vários casos de teste. A primeira linha da entrada é um inteiro t (1 ≤ t ≤ 10000)
que indica quantos serão os casos de teste. A seguir são descritos t testes. Cada teste
consiste de duas linhas de entrada. Na primeira linha existe um inteiro n (1 ≤ n ≤ 1000),
que indica o número de pés de botas existentes no depósito. Na segunda linha existem n
inteiros indicando o tamanho das botas ( o valor é positivo se o pé de bota for relativo ao
pé esquerdo e é negativo se o pé da bota for um pé direito). Cada um desses valores, em
valor absoluto, varia de 20 a 100.
Saída
Para cada caso de teste imprima um valor p, que indica o número de pares que podem ser
formados. Observe que, no caso de teste 1, os três pares de botas que podem ser formados
são (35, -35), (40, -40), (40, -40), sobrando os pés -40, 36, 38, 41, que não podem formar
pares.
Exemplo de entrada
3
10
40 35 -40 -40 -40 36 41 -35 38 40
3
35 36 -37
10
20 -20 30 -30 35 -35 40 -45 50 -55
Saída para o exemplo de entrada
3
0
3
2
Problema B
Dígito Verificador do passaporte
Dígitos verificadores são caracteres, normalmente numéricos, anexados a um identificador,
para ajudar na detecção de algum erro de preenchimento de informações. No caso do
passaporte brasileiro, o identificador é formado por nove caracteres (letras maiúsculas,
números e o caracter especial ‘<’ ). O dígito verificador é calculado com base modular 10,
usando pesos 7, 3, 1. As letras, se houver, são convertidas para números. A letra A é
convertida para 10, B para 11 e assim sucessivamente. O caracter ‘<’ é convertido para 0.
O cálculo é ilustrado abaixo:
Identificador
Conversão
Multiplicadores
Produtos
F
15
7
105
9
9
3
27
6
6
1
6
4
4
7
28
1
1
3
3
1
1
1
1
4
4
7
28
F
15
3
45
<
0
1
0
Dígito Verificador = (105+27+6+28+3+1+28+45+0) mod 10 = 243 mod 10 = 3.
O cálculo é feito assim: cada caracter do passaporte é convertido para um numero (se o
caracter já for um número nada é feito e, se for letra ou ‘<’, é convertido). Em seguida,
cada número é multiplicado pelos fatores 7, 3, 1, 7, 3, 1, 7, 3, 1, respectivamente, e o
resultado é somado. O resto da divisão por 10 dessa soma é o dígito verificador.
Neste problema você vai calcular o dígito verificador de um passaporte dado.
Entrada
A primeira linha da entrada é um inteiro t (1 ≤ t ≤ 10000) que indica quantos serão os
casos de teste. Cada teste consiste de uma linha contendo 9 caracteres, o identificador de
um passaporte brasileiro, contendo números, letras de ‘A’ a ‘Z’ ou o caracter ‘<’.
Saída
Para cada caso de teste imprima o dígito verificador do número dado.
Exemplo de entrada
3
F964114F<
FFFF15<<<
A01234BB0
Saída para o exemplo de entrada
3
8
8
3
Problema C
Jogo da Vida
O jogo da vida foi inventado pelo matemático britânico John Horton Conway e simula o
desenvolvimento das várias gerações de bactérias (células) que estão distribuídas em uma
matriz n x n. Ao final de cada cada geração uma nova população é formada. Algumas das
bactérias da geração anterior morrem e novas bactérias nascem, segundo regras descritas
abaixo. A figura a seguir ilustra a situação de início de três gerações de uma dada colônia
disposta em uma matriz 5 x 5, onde as posições com X indicam a existência de uma célula
viva e as posições em branco, uma célula morta..
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Três gerações de uma colônia de bactérias
As regras de reprodução são as seguintes e são aplicadas ao final de uma geração e são
aplicadas simultâneamente a todas as posições da matriz:
a) uma célula morta com exatamente três vizinhos renasce
b) uma célula viva com zero ou um vizinho morre
c) uma célula viva com dois ou três vizinhos permanece viva
d) uma célula com mais de três vizinhos morre.
Observe que os vizinhos de uma posição da matriz são aquelas posições que têm ao menos
um ponto em comum com a posição dada.
Neste problema você vai simular o jogo da vida.
Entrada
Haverá vários casos de teste. A primeira linha da entrada é um inteiro t (1 ≤ t ≤ 1000)
que indica quantos serão os casos de teste. A seguir são descritos t testes. Cada teste
começa com uma linha com dois valores n e g (1 ≤ n, g ≤ 20) , onde n indica a dimensão da
matriz e g a geração quer se quer conhecer. Em seguida vêm n linhas indicando a primeira
geração de uma colônia de bactérias. Cada linha contém n caracteres, '.' se a posição for
relativa a uma célula morta ou 'X', se célula viva.
Saída
Para cada teste você deve imprimir a situação inicial da geração g da colônia. Cada saída
mostra, em n linhas, a situação da colônia. A convenção de célula viva ou morta é a mesma
da entrada. Após cada matriz, imprima uma linha em branco.
4
Exemplo de Entrada
3
5 3
.XXX.
.X.X.
.XXX.
.....
.....
5 3
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
5 20
.....
..X..
..X..
..X..
.....
Saída para o exemplo de entrada
.....
XX.XX
.XXX.
..X..
.....
.....
.....
.....
.....
.....
.....
.....
.XXX.
.....
.....
5
Problema D
A Próxima Permutação
3
3
3
3
2
2
2
2
4
4
4
4
1
1
1
1
5
5
5
5
7
7
7
7
6
8
8
9
9
6
9
6
8
9
6
8
Jonas aprendeu trabalhar com permutações no curso de MAtemática Discreta e agora está
procurando problemas sobre o assunto. Ele sabe que as permutações dos inteiros 1 a n
podem ser classificadas pela ordem lexicográfica, onde a comparação de duas permutações
é feita da esquerda para a direita, sendo maior aquela que tiver o primeiro valor maior,
nessa ordem de comparação. Por exemplo, a menor permutação é (1, 2,... n) e a maior é
(n, n-1, ..., 1).
Neste problema você vai descobria qual a próxima permutação, na ordem lexicográfica, de
uma permutação dada.
ENTRADA
A primeira linha contém um inteiro, “t”, que corresponde ao número de casos de teste. Cada
caso de teste consiste de duas linhas. A primeira delas contem um inteiro n, entre 2 e
1000, o número de elementos da permutação. Na linha seguinte vem n inteiros,
correspondendo a uma permutação dos números 1 a n.
SAÍDA
Para cada caso você deve imprimir uma linha com n inteiros, correspondendo à próxima
permutação na ordem lexicográfica, em relação à permutação dada.
EXEMPLO DE ENTRADA
3
9
3 2 4 1 5 7 6 9 8
20
1 2 3 4 5 6 7 8 9 10 20 19 18 17 16 15 14 13 12 11
5
15342
EXEMPLO DE SAÍDA
32 4 1 5 7 8 6 9
1 2 3 4 5 6 7 8 9 11 10 12 13 14 15 16 17 18 19 20
15423
6
Problema E
Esperando na Fila
Ir ao Banco para ser atendido pelos caixas humanos, hoje em dia, é uma experiência pouco
agradável, porque cadaq vez existem menos funcionários nas agências. Você vai fazer um
estudo para sugerir ao gerente do seu banco qual o número de caixas devem estar
funcionando, nos dias de grande movimento. Para tanto, fez uma estatística e quer usar
essa estatística, aliada a um parâmetro de atendimento, na determinação do número de
caixas ideal. A estatística que você fez indica a hora de entrada de cada cliente, em
minutos corridos desde a abertura do banco e o tempo de atendimento no caixa para cada
um deles. Você definiu um parâmetro que é o tempo de espera máximo tolerável para cada
cliente. Você quer que, para nenhum cliente, o tempo de espera, desde o instante em que
entrou no banco até o final do atendimento nunca supere o parâmetro definido. Todos os
caixas começam a funcionar no minuto 0 e o banco adota o sistema de fila única.
Entrada
Haverá vários casos de teste. A primeira linha da entrada é um inteiro t (1 ≤ t ≤ 10000)
que indica quantos serão os casos de teste. A seguir são descritos t testes. Cada teste é
descrito em várias linhas. A primeira contém n (0 ≤ n ≤ 100), o número de clientes
observados e tmax (10 ≤ t ≤ 30), o tempo de espera máximo tolerável. Em seguida vêm n
linhas, uma para cada cliente, contendo o momento da sua chegada ao banco, tc, em minutos
corridos (0 ≤ tc ≤ 360) e o tempo de atendimento no caixa, ta, em minutos (1 ≤ ta ≤ tmax).
Os dados já vêm ordenados pelo tempo de chegada.
Saída
Para cada caso de teste imprima o número mínimo de caixas necessários em funcionamento
simultâneo, para que nenhum cliente espere mais que o tempo máximo tolerável.
Exemplo de entrada
3
2 20
0 15
7 10
3 20
0 20
4 19
15 10
2 20
0 10
0 10
Saída para o exemplo de entrada
1
2
1
7
Problema F
Contágio
3
5
6
7
1
9
2
4
8
Sim, o vírus K-- chegou ao país! Esse vírus é muito perigoso e ameaça se alastrar. Ele foi
trazido por um grupo de turistas que foi à África. Esse grupo é formado por pessoas de
várias cidades. A cada dia ele se espalha para todas as cidades vizinhas de cidades que
tenham pessoas infectadas. A Vigilância Sanitária quer fazer uma barreira para esse vírus.
Eles querem identificar quantas cidades estarão infectadas após d dias da chegada do
vírus.
Você deve ajudar a Vigilância Sanitária, fazendo um programa que identifica o número de
cidades infectadas, conhecendo a interligação de todas as cidades do país e as cidades
iniciais onde o vírus chegou.
Entrada
Haverá vários casos de teste. A primeira linha da entrada é um inteiro t (1 ≤ t ≤ 10000)
que indica quantos serão os casos de teste. A seguir são descritos t testes. Cada teste é
descrito em várias linhas. A primeira contém 4 inteiros: n (1 ≤ n ≤ 1000), o número de
cidades do país, m (n-1 ≤ m ≤ 10000),, o número de interligações entre as cidades,
c (1 ≤ c ≤ n), o número de cidades inicialmente infectadas e d (0 ≤ d ≤ n), o número de dias
que se passaram após a infecção inicial. A seguir vêm n linhas com 2 inteiros indicando
todos os pares de cidades interligadas. Finalmente vêm c linhas com um inteiro em cada
uma delas, indicando as cidades infectadas. A numeração das cidades é de 1 a n.
Saída
Para cada caso de teste imprima o número de cidades infectadas no país, após d dias da
chegada do vírus.
Exemplo de entrada
2
9 10 2 2
13
42
34
53
45
65
76
68
87
89
2
9
4414
12
13
24
34
4
Saída para o exemplo de entrada
8
4
8
Problema G
Os três cilindros
Djair quer colocar três cilindros de mesmo comprimento e raios diferentes em uma caixa.
Todos os cilindros estão apoiados no fundo e os da ponta estão apoiadas na lateral. Djair
pode trocar a ordem dos cilindros até conseguir a menor largura possível. Ele quer sua
ajuda para calcular qual é essa largura mínima. Vamos lá, ajude-o! Faça um programa para
calcular a largura possível, conhecendo-se os raios dos três cilindros.
Entrada
Haverá vários casos de teste. A primeira linha da entrada é um inteiro t (1 ≤ t ≤ 10000)
que indica quantos serão os casos de teste. A seguir são descritos t testes. Cada teste é
descrito em uma linha, contendo três inteiros entre 1 e 100, os raios dos cilindros.
Saída
Para cada caso de teste imprima a largura mínima que deve ter a caixa. A saída deve ser um
número com duas decimais, arredondado.
Exemplo de entrada
10
112
123
1 2 10
1 20 20
10 10 10
10 20 40
1 20 100
5 20 50
10 11 12
98 99 100
Saída para o exemplo de entrada
7.66
11.29
20.94
80.00
60.00
126.57
209.44
133.25
65.89
593.99
9
Problema H
Mega-Sena
Uma das loterias mais populares no Brasil é a Mega-Sena. Ganha quem acertar os 6 números
sorteados (sena), porém também existem prêmios para quem acertar 5 (quina) ou mesmo
apenas 4 dezenas (quadra). Cada cartão possui 60 números e o apostador pode marcar de 6
a 15 dezenas. A quantidade de apostas de cada cartão corresponde ao número de
combinações possíveis com as dezenas marcadas. Por exemplo, se o apostador marcar os
números de 1 a 7, ele estará concorrendo com 7 cartões distintos:
1-2-3-4-5-6 1-2-3-4-5-7
1-2-3-4-6-7 1-2-3-5-6-7
1-2-4-5-6-7 1-3-4-5-6-7
2-3-4-5-6-7
Desta forma é possível que uma pessoa ganhe mais de um prêmio com o mesmo cartão. No
exemplo acima, se fossem sorteadas as dezenas 1-2-3-4-5-6, o apostador acertaria a sena
com a 1ª combinação e seis quinas com as demais.
Em breve será lançada uma nova loteria com mais números nos cartões e apostas maiores. A
premiação será análoga à da Mega-Sena, isto é, com três faixas de premiação: a principal
para quem acertar as “n” dezenas sorteadas e outras duas secundárias para os que
acertarem “n-1” e “n-2” números. Os organizadores estão pedindo ajuda para saber quantos
prêmios um apostador pode ganhar em cada faixa de premiação em função da quantidade de
dezenas apostadas e o número de acertos.
Entrada
A primeira linha contém um inteiro k igual ao número de casos. A seguir k linhas cada um
contendo 3 inteiros: o número de dezenas sorteadas (6 ≤ n ≤ 50), a quantidade de dezenas
marcadas no cartão (n ≤ m ≤ n + 30) e o número de acertos (0 ≤ a ≤ n).
Saída
Para cada caso imprimir uma linha contendo três inteiros, correspondentes à quantidade de
prêmios que o apostador tem direito em cada uma das faixas. É garantido que as respostas
são inferiores a 231.
Exemplo de Entrada
2
676
696
Exemplo de Saída
160
1 18 45
10
Problema I
Colagem
Ex em plo de
Cola gem
gem
Isabel está aprendendo suas primeiras letras e o dever de casa hoje é recortar textos de
jornais para formar algumas palavras. Felizmente na casa da Isabel tem muitos exemplares
de um mesmo jornal, de tal forma que ela consegue recortar tudo que precisa. O pai da
Isabel ficou pensando qual seria o número mínimo de fragmentos que deveriam ser obtidos
para formar as palavras pedidas.
Você vai ajudar ao pai da Isabel a responder sua dúvida, fazendo um programa.
Entrada
Haverá vários casos de teste. A primeira linha da entrada é um inteiro t (1 ≤ t ≤ 10000)
que indica quantos serão os casos de teste. A seguir são descritos t testes. Cada teste é
descrito em duas linhas. A primeira linha contém o texto que Isabel precisa obter. A
segunda contém o texto completo do jornal disponível. Cada texto tem no máximo 200
caracteres e todos são letras maiúsculas.
Saída
Para cada caso de teste imprima o número mínimo de fragmentos necessário para formar a
palavra pedida. Lembre-se que há tantos exemplares do jornal usado quantos necessários e
sempre será possível fazer a tarefa.
Exemplo de entrada
2
ARARA
ARAMEFARPADO
EXEMPLODECOLAGEM
EXPLODECORACAOSELVAGEM
Saída para o exemplo de entrada
2
5
11
Problema J
Maiores e Menores
Ollie e Stan estão jogando um jogo envolvendo n bolas. Essas bolas estão em uma caixa e,
em cada uma delas, está escrito um inteiro. Eles sorteiam um número k menor ou igual a
n/2. Ollie escolhe aleatoriamente k dessas bolas e Stan também escolhe k bolas. Quem
ficar com a maior soma ganha o jogo. Joaquim está observando e agora quer saber, dados
os valores das n bolas e um valor k, qual a maior soma e qual a menor soma que podem ser
obtidas por algum dos jogadores.
Você vai fazer um programa para calcular esse máximo e o mínimo.
ENTRADA
A primeira linha contém um inteiro, “t”, que corresponde ao número de casos de teste. Cada
caso de teste consiste de duas linhas. A primeira delas contem dois inteiros: n, entre 2 e
10000, o número de bolas e k, um valor menor ou igual a n/2. Na linha seguinte vêm n
inteiros positivos, cujo valor varia entre 1 e 10000, correspondendo ao valor das bolas.
SAÍDA
Para cada caso você deve imprimir uma linha com dois inteiros: o valor máximo que um dos
jogadores pode ter e o valor mínimo possível para a soma de k bolas do conjunto.
EXEMPLO DE ENTRADA
3
42
1243
10 3
3333333333
10 5
1 100 40 25 33 44 40 25 12 97
EXEMPLO DE SAÍDA
7 3
9 9
321 96
12
Download