IV MARATONA DE PROGRAMAÇÃO INTERNA UERJ – 18/06/2011
Este caderno contém 11 páginas com a descrição de 10 problemas1 definidos
a seguir:
A - Liquidação!!!
B – Quadratura do retângulo II
C – Bolas chinesas II
D – Jogo da matriz
E – Aquecimento global
F – Travessia de ponte
G - Pista de esqui
H – Corra que a Copa vem aí...
I – Inversões
J - NegaFibonacci
1. Resolva os problemas conforme orientação anterior.
2. Tenha muita atenção e calma.
Boa sorte.
1
Problema A
Liquidação!!!
Josefina não perde uma liquidação na cidade. Ela adora comprar, mas é do tipo de
consumidor que pesquisa antes da compra. Como estamos na estação das liquidações, ela
descobriu inúmeras ofertas para compras de mais de uma unidade de cada objeto. As
ofertas são assim: você leva p peças e só paga q. Por exemplo: você leva 10 camisas e só
paga 8 ou leva 7 e paga só 5. Josefina está em dúvidas sobre qual oferta é mais vantajosa,
dentre tantas.
Você vai ajudá-la escrevendo um programa que indica a compra mais vantajosa, de uma
série de ofertas encontradas.
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 é
descrito em várias linhas. A primeira indica o número n de ofertas de um dado objeto
(1 ≤ n ≤ 100). A seguir vêm n linhas, cada uma contendo dois inteiros, p e q, ambos entre 1
e 1000. O primeiro, p, indica quantas peças o cliente leva e o segundo indica quantas peças,
q, ele paga.
Saída
Para cada caso de teste imprima os valores de p e q que correspondem à oferta mais
vantajosa encontrada (aquela com o menor preço médio). Só haverá uma resposta certa.
Exemplo de entrada
2
3
10 7
20 15
30 20
2
20 7
10 3
Saída para o exemplo de entrada
30 20
10 3
2
Problema B
Quadratura do Retângulo II
Certos retângulos a x b, onde b é o lado maior, podem ser transformados em quadrados
segundo a construção ilustrada nas figuras. São obtidas três peças, 1, 2 e 3, por corte.
Justapondo as peças, obtem-se o quadrado procurado. Os passos são os seguintes:
a) marca-se a linha média, GH, relativa ao lado maior, de tamanho b.
b) marca-se o quadrado AFED, (lado AD = a, o menor) obtendo a linha EF.
c) obtem-se O, tal que HO = HB. Em seguida marca-se a linha BI, passando por O.
Você pode observar que AO é o lado do quadrado procurado, pois AO = BI = ab
d) cortam-se as figuras segundo as linhas BI e AO.
e) as imagens inferiores mostram a montagem do quadrado final.
Neste problema, dado um retângulo, você vai determinar as áreas das Figuras 1, 2 e 3, caso
seja possível fazer a quadratura.
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 com 2 inteiros,
a, b (1 ≤ a, b ≤
1000), as dimensões do retângulo.
Saída
Para cada caso de teste imprima três números (com precisão de 2 casas decimais), indicando as áreas das Figuras 1, 2 e 3. Caso não seja possível fazer a construção, escrever -1.
Exemplo de entrada
3
15 10
10 20
10 30
Saída para o xemplo de entrada
53.03 61.61 35.36
100.00 50.00 50.00
-1
3
Problema C
Bolas chinesas II
Ano passado, numa viagem à China, Joaquim comprou duas lindas bolas de vidro que são
antistress. Ele teve dificuldade em acomodar essas bolas numa caixa em forma de
paralelepípedo. Neste ano ele voltou à China, comprou duas bolas e quer colocá-las em uma
caixa em forma de cubo. Ele quer saber qual o menor tamanho de caixa onde cabem as duas
bolas. Ou seja, ele conhece os raios das bolas e quer saber o lado do menor cubo onde
caibam as bolas.
Você vai ajudá-lo, escrevendo um programa para indicar o tamanho do lado dessa menor
caixa cúbica.
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
consiste de dois inteiros r1, r2, entre 1 e 1000, que são os raios das duas bolas.
Saída
Para cada teste você deve imprimir o tamanho do lado da caixa cúbica procurada,
arredondado para duas casas decimais.
Exemplo de Entrada
3
20 5
6 20
20 20
Saída para o exemplo de entrada
40.00
41.01
63.09
4
Problema D
Jogo da matriz
Sua turma está tendo aulas de Teoria dos Jogos e o professor quer exemplificar o princípio
de MaxMin. Então idealizou o seguinte jogo. É apresentada uma matriz quadrada n x n de
inteiros e os alunos escolhem um número p, entre 1 e n. O professor, então, tem liberdade
de escolher qualquer número da linha p ou da coluna p como a nota da turma. Mas ele, de
propósito, vai escolher o menor número possível. Por exemplo, dada a matriz:
2
10
10
10
9
6
4
10
6
3
7
9
10
8
3
8
6
10
7
6
9
10
3
6
6
se os alunos escolherem o número 1, o professor selecionaria a nota 2 (menor valor da linha
ou coluna 1); se escolherem 2, o professor seleciona a nota 3 (menor valor da coluna 2); se
escolherem 3, o professor seleciona 3 (menor valor da linha ou coluna 3); se escolherem 4,
o professor seleciona 6 (menor valor da linha ou coluna 4); finalmente, se escolherem 5, o
professor seleciona 3 (menor valor da linha ou coluna 5). Portanto, a melhor escolha para os
alunos é 4, obtendo a nota 6.
Você vai ajudar a turma, fazendo um programa que indica o número a ser escolhido pela
turma, para ter a maior nota possível escolhida pelo professor.
ENTRADA
A primeira linha contém um inteiro, “t”, que corresponde ao número total de casos. Cada
caso é descrito em várias linhas. A primeira delas é o número n, a dimensão da matriz
(1 ≤ n ≤ 1000). A seguir, vêm n linhas, cada linha contendo n inteiros, entre 0 e 100, os
elementos de cada linha da matriz.
SAÍDA
Para cada caso você deve imprimir a melhor nota possível que os alunos poderão receber,
escolhendo o número adequado.
EXEMPLO DE ENTRADA
2
5
26789
10 4 9 6 10
10 10 10 10 3
10 6 8 7 6
93366
3
70 100 100
100 90 100
100 100 80
EXEMPLO DE SAÍDA
6
90
5
Problema E
Aquecimento Global
Que dia quente! Tudo o que eu precisava era um copo d’água bem gelada! Peguei um copo
vazio, pus um cubo de gelo... Quarenta graus à sombra! Só pode ser culpa do aquecimento
global! Distraí-me pensando nisso e, quando, percebi parte do gelo já havia derretido. Havia
água suficiente para fazê-lo flutuar, ainda que minimamente. Quanto será que sobrou de
gelo, sabendo que o derretimento foi uniforme?
ENTRADA
A primeira linha contém um inteiro, “t”, que corresponde ao número total de casos. As “t”
linhas seguintes apresentam dois números inteiros, A e R, que representam
respectivamente a aresta inicial do cubo de gelo e o raio do copo, ambos menores que 1000.
Os números estão separados por um espaço simples. Considerar que o copo é perfeitamente
cilíndrico, bastante alto e que o gelo cabe completamente nele.
SAÍDA
Para cada caso informar o volume final do cubo de gelo com três casas decimais,
arredondando para o decimal mais próximo.
EXEMPLO DE ENTRADA
1
10 8
EXEMPLO DE SAÍDA
123.030
COMENTÁRIOS:
Princípio de Arquimedes (http://pt.wikipedia.org/wiki/Empuxo)
“Todo corpo mergulhado num fluido em repouso sofre, por parte do fluido, uma força
vertical para cima, cuja intensidade é igual ao peso do fluido deslocado pelo corpo.”
As figuras abaixo mostram de modo esquemático o derretimento do gelo e o surgimento do
nível de água. A situação descrita no problema corresponde à terceira figura.
Copo
Gelo
Situação inicial
Copo
Gelo
Derretimento inicial
Copo
Gelo
Flutuação mínima
Copo
Gelo
Derretimento
posterior
6
Problema F
Travessia de ponte
Uma importante ponte está semi-interditada por problemas de corrosão. Agora somente um
número limitado q de carros pode atravessar de cada vez. Então formam-se comboios de
até q veículos para atravessar juntos. Há carros de todos os tipos e cada um leva um tempo
diferente na travessia, de forma que o tempo de travessia de um grupo é aquele do carro
mais lento. Estamos pensando no menor tempo possível de travessia, considerando toda a
fila. Por exemplo se a fila tiver 5 carros com tempos de travessia 6, 20, 30, 15 e 5, é
melhor o primeiro carro atravessar sozinho, gastando 6 unidades de tempo, depois o grupo
dos três seguintes, gastando 30 e, por fim, o último carro, gastando 5, o que dá um tempo
total de 41. Você é o responsável para organizar os grupos, de forma a minimizar o tempo
total da travessia. Escreva um programa para ajudar nessa tarefa.
ENTRADA
A primeira linha contém um inteiro, “t”, que corresponde ao número total de casos. Cada
caso é descrito em uma linha com vários inteiros. Os dois primeiros, n e q (1 ≤ n, q ≤ 1000),
indicam o número de carros na fila e o número de carros que podem atravessar
simultaneamente. A seguir, na mesma linha, vêm n inteiros entre 1 e 1000, indicando o
tempo de travessia de cada carro, na mesma ordem da fila.
SAÍDA
Para cada caso você deve imprimir o tempo total mínimo possível para a travesia dos n
carros que estão na fila.
EXEMPLO DE ENTRADA
2
6 2 10 5 5 20 20 5
5 3 6 20 30 15 5
EXEMPLO DE SAÍDA
40
41
7
Problema G
Pista de esqui
Sandro está se preparando para ir esquiar no fim do ano na Argentina e está estudando as
melhores pistas de esqui. Ele gosta de fazer uma descida demorada da montanha. Por isso,
conseguiu o mapa das alturas do terreno e quer escolher um trajeto que permita a descida
mais longa possível, pois há teleférico para levar a qualquer parte da pista. As alturas do
terreno são representadas em uma matriz n x n. Sandro percebeu que pode escolher o
trajeto procurando números decrescentes vizinhos de cada posição. Os vizinhos de um
ponto estão acima, abaixo, à esquerda ou à direita na matriz. Por exemplo, na matriz
abaixo, o maior trajeto encontrado foi 11-9-4-2-1:
1
5
4
1
2
3
2
3
4
9
11
7
3
8
9
5
Você vai ajudar o Sandro, fazendo um programa que, dada a matriz de alturas, determina o
tamanho da maior sequência decrescente de números vizinhos, que indica a melhor
trajetória para Sandro fazer.
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. Cada caso de teste é
descrito em várias linhas. A primeira é o tamanho n da matriz quadrada, (1 ≤ n ≤ 100). A
seguir vêm n linhas, contendo os valores das alturas de cada linha da matriz, estando as
alturas entre 0 e 1000.
SAÍDA
Para cada caso escrever o tamanho da maior trajetória que Sandro pode fazer.
EXEMPLO DE ENTRADA
2
4
1243
5398
4 2 11 9
1375
3
123
894
765
EXEMPLO DE SAÍDA
5
9
8
Problema H
Corra que a Copa vem aí...
A cidade se prepara para a Copa e há obras por todo lado. O trânsito está caótico em
algumas ruas, porque muitas vias muito importantes foram fechadas para obras e alguns
pontos da cidade ficaram inalcançáveis a partir de outros. O prefeito quer reparar esses
erros com urgência e reabrir o trânsito em algum lugar, mas também não quer mudar muito
as obras. Dado o mapa de trânsito da cidade, representado em um digrafo, onde os vértices
são os cruzamentos de trânsito e as arestas os trechos de rua, com determinada direção
de tráfego, o prefeito quer saber se há como tornar mão dupla algum trecho hoje em mão
única, para que todos os locais da cidade sejam acessíveis a partir de qualquer outro ponto.
Por exemplo, se fizer isso no trecho entre os pontos 5 e 6 da figura abaixo, todos os
pontos passam a ser acessíveis a partir do ponto 6.
4
2
6
1
3
5
Entrada
A entrada consistirá de vários casos de testes indicados na primeira linha pelo valor inteiro
t. Cada teste começa com uma linha contendo 2 números: N, M. N (2 ≤ N ≤ 100) representa
o número de cruzamentos distintos. M (0 ≤ M ≤ 1000) indica o número de trechos de ruas.
A seguir existem M linhas contendo, cada uma delas dois números A e B, indicando que
existe um trecho de rua entre A e B, com o trânsito fluindo de A para B. Os trechos de rua
são numerados de 1 a N.
Saída
Para cada caso de teste você deve imprimir uma linha de saída, cujo conteúdo deve ser: 0,
se não existir o problema mencionado, -1, se o problema não pode ser resolvido ou 1 se o
problema pode ser resolvido, ou seja, é possível tornar um único trecho de rua, hoje em
mão única, para mão dupla, de forma que qualquer ponto da cidade seja alcançável a partir
de qualquer outro.
2 1
Exemplo de Entrada
1 2
3
2 2
6 7
1 2
5 4
2 1
31
2
4
5
5
1
3
5
2
3
6
2
2
Exemplo de Saída
1
-1
0
9
Problema I
Inversões
Júlio começou estudar Matemática Discreta e está pensando em inventar um algoritmo
mirabolante para ordenar dados guardados em um vetor. Inicialmente ele está trabalhando
com vetores de n elementos cujos elementos são os números de 1 a n (o vetor contém uma
permutação dos n primeiros inteiros positivos). Por exemplo, um vetor de 10 elementos de
interesse do Júlio poderia ser o seguinte:
1
2
3
4
5
6
7
8
9
10
4
5
6
8
2
3
10
7
1
9
Júlio quer contar quantos pares de elementos "conjugados" existem. Um par de elementos
(a, b) é conjugado no vetor V, se (a ≠ b), V[a] = b e V[b] = a. No vetor V mostrado temos
dois pares conjugados: o par (2, 5), pois V[2] = 5 e V[5] = 2 e o par (3, 6), pois V[3] = 6 e
V[6] = 3.
Você vai fazer um programa para contar o número de pares conjugados de um vetor de n
elementos, que contém uma permutação dos números 1 a n.
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. Cada caso de teste vem em
uma linha com vários inteiros. O primeiro número da linha, n (1 ≤ n ≤ 10000) indica o tamanho
do vetor. A seguir, na mesma linha, vêm n inteiros guardados, respectivamente nas posições
1 a n do vetor.
SAÍDA
Para cada caso escrever o número de pares conjugados do vetor.
EXEMPLO DE ENTRADA
2
10 4 5 6 8 2 3 10 7 1 9
6123456
EXEMPLO DE SAÍDA
2
0
10
Problema J
NegaFibonacci
Quem já participou de alguma Maratona de Programação provavelmente já se deparou com
a famosa série de Fibonacci. Apenas para recordar, a definição clássica desta série é:
F0 = 0
F1 = 1
Fn = Fn-1 + Fn-2, para n > 1.
Mas vejamos o que acontece se aplicarmos a recursão para calcular os dois primeiros
termos da série:
F1 = F0 + F-1
F0 = F-1 + F-2
F-1? F-2? Conheçam os NegaFibonacci. Rearranjando as expressões acima, pode-se deduzir a
recursão para os demais termos dessa série:
F-1 = F1 – F0 = 1
F-2 = F0 – F-1 = -1
Fn = Fn+2 – Fn+1 , para n < -2
Portanto os primeiros termos desta série são: 1, -1, 2, -3, 5, -8, 13, -21 34 -55 89...
Uma propriedade interessante é que é possível representar, de forma única, qualquer
inteiro como uma soma de NegaFibonacci, usando um algoritmo guloso. Para garantir esta
unicidade da soma, não é permitido utilizar dois NegaFibonacci consecutivos. Por exemplo:
a) 18 = 5 + 13 = F-5 + F-7
b) -27 = 2 + (-8) + (-21) = F-3 + F-6 + F-8
Podemos transformar estas somas em notação binária, indicando por “1” os NegaFibonacci
presentes e por “0” os demais. Sendo assim os dois casos acima seriam representados por:
a) 18 = 1010000
b) -27 = 10100100
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. Cada caso é composto por
um número inteiro n (|n| ≤ 109) em uma linha.
SAÍDA
Para cada caso escrever a notação binária que representa a soma de NegaFibonacci cujo
resultado é igual a n. Notar que 0 vai ser representado como 0.
-27
EXEMPLO DE ENTRADA
EXEMPLO DE SAÍDA
3
0
0
1010000
18
10100100
11
12
Download

Problemas