Maratona de Programação 3a Semana Acadêmica de

Propaganda
Ministério da Educação
Universidade Tecnológica Federal do Paraná
Câmpus Toledo
Maratona de Programação
3 Semana Acadêmica de Engenharia e Tecnologia
a
29 de Março de 2017
Caderno de Problemas
Regras do Torneio
1. Composição das Equipes
(a) Cada equipe deverá ser composta por 03 (três) integrantes, dos quais um deve ser o capitão
e pelo menos um dos integrantes deve estar inscrito na 3a SAET.
(b) Ao capitão cabe representar a equipe durante a condução do torneio, servindo de elo de
comunicação entre a equipe, os juízes e o comitê organizador.
2. Regras de Condução do Torneio
(a) As equipes receberão um caderno de prova com 10 problemas que devem ser resolvidos
durante as 4 horas de competição.
(b) Os problemas deverão ser resolvidos em uma das seguintes linguagens de programação: C,
C++ ou Java.
(c) Quando uma equipe julgar que tem um programa que resolve um problema, ela pode
submetê-lo pelo sistema para a correção pelos juízes, que compilam e executam este programa para uma bateria de testes que é desconhecida das equipes.
(d) Um problema é considerado resolvido se, para todos os testes da bateria, ele devolve o
resultado esperado pelos juízes.
(e) Para cada submissão a equipe recebe uma resposta, conforme a Tabela 1.
(f) A equipe vencedora é aquela que resolver a maior quantidade de problemas nas 4 horas de
competição, de acordo com o placar do sistema de submissão.
(g) No caso de empates no número de problemas resolvidos as equipes serão classificadas pelo
menor tempo.
(h) O tempo total da equipe é dado pela soma dos tempos dos problemas corretamente resolvidos
pela equipe.
(i) O tempo de um problema é computado pelo número de minutos decorridos desde o início
da competição até o momento da submissão correta somado com uma penalidade de 20
minutos por submissão incorreta feita anteriormente para o mesmo problema.
(j) Persistindo o empate, será considerada vencedora a equipe com a primeira submissão correta
para qualquer um dos problemas.
(k) Casos omissos serão resolvidos pela comissão organizadora.
3. Sobre a Conduta das Equipes
Página 1 / 15
Tabela 1: Tipo de Respostas.
Significado
O programa compilou e executou sem erros para toda a bateria de testes.
Presentation error
A resposta produzida pelo programa apresenta algum erro
na formatação da saída.
Wrong answer
O programa produziu uma resposta errada para algum dos
casos de teste da bateria de testes dos juízes.
Time limit exceeded
O tempo de execução do programa para a bateria de testes
dos juízes foi além do tempo esperado.
Runtime error
O programa compilou corretamente, mas abortou durante
sua execução.
Compilation error
O programa não compila corretamente na máquina do juiz.
O sistema também interpreta warnings como erros.
If possible, contact staff Geralmente, indica que ocorreu um erro no sistema de submissão, o capitão deverá comunicar os juízes.
ID
1
Mensagem
Yes
2
NO -
3
NO -
4
NO -
5
NO -
6
NO -
7
NO -
(a) As equipes poderão trazer e utilizar qualquer material de consulta, desde que na forma
impressa (notas de aula, apostilas, listagens de programas, revistas, manuais, livros, etc).
(b) As equipes não poderão trazer consigo nenhum material em meio digital (CDs, pen-drives,
etc.) e não terão acesso à Internet durante o período de realização do torneio.
(c) Os participantes não poderão se afastar do local da competição sem autorização ou acompanhamento do comitê organizador, sob pena de desclassificação da equipe.
(d) Qualquer reclamação ou solicitação para a organização do torneio deverá ser realizada apenas
pelo capitão da equipe.
4. Instruções
(a) Este caderno de instruções é composto por 15 páginas. Verifique se o caderno está completo
quando o receber. Caso alguma página esteja faltando, comunique ao pessoal de apoio, que
providenciará outra cópia do caderno.
(b) Os problemas serão fornecidos no início do torneio e serão iguais para todas as equipes.
Todos os problemas têm o mesmo valor na correção.
(c) A correção é automatizada, portanto, siga atentamente as exigências do problema quanto
ao formato da entrada e saída de seus programas.
(d) Não implemente nenhum recurso gráfico nas suas soluções (janelas, menus, etc.), nem utilize
qualquer rotina para limpar a tela ou posicionar o cursor.
(e) Os problemas não estão ordenados por ordem de dificuldade; procure resolver primeiro as
questões mais fáceis.
(f) Preste atenção no nome dos arquivos fonte indicados nas tarefas, sendo que apenas um
arquivo deve ser submetido. As soluções devem ser arquivos com sufixo “.c”, “.cpp” ou
“.java”.
(g) Não utilize funções para entrada e saída de arquivos, pois o sistema de submissão utiliza a
entrada e saída padrão.
5. Disposições Finais
(a) A organização da competição é responsável pela decisão de qualquer caso não previsto.
(b) As equipes inscritas permitem o uso e divulgação dos programas submetidos à correção pela
organização da competição.
(c) O torneio será realizado no laboratório E-303. O aquecimento terá início 30 minutos antes
da competição, que tem prazo máximo de 4 horas. As equipes deverão estar no local do
torneio com 10 minutos de antecedência.
Página 2 / 15
Problema A - Mergulho
Arquivo: mergulho.[c|cpp|java]
O recente terremoto em Nlogônia não chegou a afetar muito as edificações da capital, principal
epicentro do abalo. Mas os cientistas detectaram que o principal dique de contenção teve um dano
significativo na sua parte subterrânea que, se não for consertado rapidamente, pode causar o seu
desmoronamento, com a consequente inundação de toda a capital. O conserto deve ser feito por
mergulhadores, a uma grande profundidade, em condições extremamente difíceis e perigosas. Mas
como é a sobrevivência da própria cidade que está em jogo, seus moradores acudiram em grande
número como voluntários para essa perigosa missão. Como é tradicional em missões perigosas, cada
mergulhador recebeu no início do mergulho uma pequena placa com um número de identificação. Ao
terminar o mergulho, os voluntários devolviam a placa de identificação, colocando-a em um repositório.
O dique voltou a ser seguro, mas aparentemente alguns voluntários não voltaram do mergulho. Você
foi contratado para a penosa tarefa de, dadas as placas colocadas no repositório, determinar quais
voluntários perderam a vida salvando a cidade.
Entrada
A entrada é composta de duas linhas. A primeira linha contém dois inteiros N e R, indicando
respectivamente o número de voluntários que mergulhou e o número de voluntários que retornou do
mergulho. Os voluntários são identificados por números de 1 a N. A segunda linha da entrada contém
R inteiros, indicando os voluntários que retornaram do mergulho (ao menos um voluntário retorna do
mergulho).
Saída
Seu programa deve produzir uma única linha, contendo os identificadores dos voluntários que não
retornaram do mergulho, na ordem crescente de suas identificações. Deixe um espaço em branco
após cada identificador (note que isto significa que deve haver um espaço em branco também após o
último identificador). Se todos os voluntários retornaram do mergulho, imprima apenas o caractere ‘*’
(asterisco).
Restrições
• 1 ≤ R ≤ N ≤ 104
Exemplo
Entrada
53
315
Saída
24
Entrada
66
613254
Saída
*
Página 3 / 15
Problema B - Triângulos
Arquivo: triagulos.[c|cpp|java]
São dados N pontos em uma circunferência. Você deve escrever um programa que determine quantos
triângulos equiláteros distintos podem ser construídos usando esses pontos como vértices. A figura
abaixo ilustra um exemplo; (a) mostra um conjunto de pontos, determinados pelos comprimentos dos
arcos de circunferência que têm pontos adjacentes como extremos, e (b) mostra os dois triângulos que
podem ser construídos com esses pontos.
Entrada
A primeira linha da entrada contém um número inteiro N , o número de pontos dados. A segunda
linha contém N inteiros Xi , representando os comprimentos dos arcos entre dois pontos consecutivos
na circunferência: para 1 ≤ i ≤ (N − 1), Xi representa o comprimento do arco entre os pontos i e
i + 1; XN representa o comprimento do arco entre os pontos N e 1.
Saída
Seu programa deve produzir uma única linha, contendo um único inteiro, o número de triângulos
equiláteros distintos que podem ser construídos utilizando os pontos dados como vértices.
Restrições
• 3 ≤ N ≤ 105
• 1 ≤ Xi ≤ 103 , para 1 ≤ i ≤ N
Exemplo
Entrada
8
42422622
Saída
2
Entrada
6
342153
Saída
1
Página 4 / 15
Problema C - Grid de Largada
Arquivo: grid.[c|cpp|java]
Na Nlogônia, vai ser realizada a sensacional final mundial da fórmula 17. Os competidores se
alinham na largada e disputam a corrida. Você vai ter acesso aos grids de largada e de chegada. A
questão é determinar o número mínimo de ultrapassagens que foram efetuadas durante a competição.
Entrada
Cada caso de teste utiliza três linhas. A primeira linha de um caso de teste contém um inteiro N
indicando o número de competidores. Cada competidor é identificado com um número de 1 a N. A
segunda linha de cada caso tem os N competidores, em ordem do grid de largada. A terceira linha de
cada caso tem os mesmos competidores, porém agora na ordem de chegada.
Saída
Para cada caso de teste imprima uma linha contendo um único número inteiro, que indica o número
mínimo de ultrapassagens necessárias para se chegar do grid de largada ao grid de chegada.
Restrições
• 2 ≤ N ≤ 24
Exemplo
Entrada
5
12345
31254
Saída
3
Entrada
5
31254
12345
Saída
3
Entrada
5
31254
53214
Saída
4
Página 5 / 15
Problema D - Letras
Arquivo: letras.[c|cpp|java]
Entrada
A primeira linha da entrada contém um inteiro N (2 ≤ N ≤ 100), o tamanho do parque. As N
linhas seguintes contém, cada uma, uma sequência de N letras, definindo o parque.
Saída
Seu programa deve imprimir uma linha contendo um inteiro, o comprimento de um caminho consistente mínimo. Se não houver um caminho consistente, imprima -1.
Exemplo
Entrada
6
DdaAaA
CBAcca
eEaeeE
bBbabB
DbDdDc
fFaAaC
Saída
13
Página 6 / 15
Entrada
7
aAaaaaa
aAaaaAa
aAaaaAA
aaAaAaa
AaAaaAa
aaAAaAa
aaaaaAa
Saída
-1
Página 7 / 15
Problema E - Concurso de Contos
Arquivo: concurso.[c|cpp|java]
Machado gosta muito de escrever. Já escreveu muitos contos, resenhas, relatos de viagens que fez, além
de um pequeno romance. Agora Machado quer participar de um concurso de contos, que tem regras
muito rígidas sobre o formato de submissão do conto.
As regras do concurso especificam o número máximo de caracteres por linha, o número máximo de
linhas por página, além de limitar o número total de páginas. Adicionalmente, cada palavra deve ser
escrita integralmente em uma linha (ou seja, a palavra não pode ser separada silabicamente em duas
linhas). Machado quer escrever um conto com o maior número de palavras possível, dentro das regras
do concurso, e precisa de sua ajuda.
Dados o número máximo de caracteres por linha, o número máximo de linhas por página, e as
palavras do conto que Machado está escrevendo, ele quer saber o número mínimo de páginas que seu
conto utilizaria seguindo as regras do concurso.
Entrada A primeira linha de um caso de teste contém três inteiros N , L e C, que indicam,
respectivamente, o número de palavras do conto de Machado, o número máximo de linhas por página
e o número máximo de caracteres por linha. O conto de Machado é inovador e não contém nenhum
caractere além de letras maiúsculas e minúsculas e espaços em branco, sem letras acentuadas e sem
cedilha. A segunda linha contém o conto de Machado, composto de N palavras separadas por espaços
em branco; há espaço em branco somente entre duas palavras, e entre duas palavras há exatamente
um espaço em branco.
Saída
Para cada caso de teste imprima uma única linha, contendo um único número inteiro, indicando o
número mínimo de páginas que o conto de Machado ocupa, considerando as regras do concurso.
Restrições
• 2 ≤ N ≤ 1000
• 1 ≤ L ≤ 30
• 1 ≤ C ≤ 70
• 1 ≤ comprimentodecadapalavra ≤ C
Exemplos
Página 8 / 15
Entrada
14 4 20
Se mana Piedade tem casado com Quincas Borba apenas me daria uma esperanca colateral
Saída
2
Entrada
16 3 30
No dia seguinte entrou a dizer de mim nomes feios e acabou alcunhando me Dom Casmurro
Saída
1
Entrada
522
a de i de o
Saída
3
Entrada
522
aeiou
Saída
3
Página 9 / 15
Problema F - GCD
Arquivo: gcd.[c|cpp|java]
Problema a seguir se dá sobre o valor de GCD (Greatest Common Divisor ). Dado o valor N, você
deverá achar o valor de G. A definição de G é dada por:
O GCD(i,j) indica o maior divisor comum entre o inteiro i e o inteiro j.
Entrada
A entrada é dada por um valor N, sendo que (1 < N < 501).
Saída
A saída corresponde a um valor G, em uma linha separada.
Exemplos
Entrada
10
100
Saída
67
13015
Página 10 / 15
Problema G - Etiquetas coloridas
Arquivo: etiquetas.[c|cpp|java]
Entrada
A entrada consiste de três linhas contendo, respectivamente, os inteiros R, G e B, 1 <= R, G, B
<= ffffff . Todos os três inteiros na entrada estão em hexadecimal, com letras minúsculas.
Saída
Imprima uma linha na saída contendo um inteiro positivo, em hexadecimal com letras minúsculas,
representando a quantidade máxima de etiquetas que podemos colar na parede.
Exemplos
Entrada
1fa8
3bc
12
fffff0
ffffff
ab2c1
ffffff
1
1
Saída
2be81
1
1fffffc000003
Página 11 / 15
Problema H - Divisores
Arquivo: divisores.[c|cpp|java]
Entrada
A entrada consiste em uma única linha que contém quatro números inteiros A, B, C, D, como
descrito acima. Sendo que (1 ≤ A, B, C, D ≤ 109 ).
Saída Seu programa deve produzir uma única linha. Caso exista pelo menos um número n para os
quais A, B, C, D façam sentido, a linha deve conter o menor n possível. Caso contrário, a linha deve
conter -1.
Exemplos
Entrada
2 12 8 2
3 4 60 105
Saída
4
6
Página 12 / 15
Problema I - Andando no Tempo
Arquivo: tempo.[c|cpp|java]
Exemplos
Entrada
22 5 22
31 110 79
45 8 7
Saída
S
S
N
Página 13 / 15
Problema J - Risada
Arquivo: risada.[c|cpp|java]
Entrada
A entrada consiste em uma única linha, contendo uma sequência de no máximo 50 caracteres,
formada apenas por letras minúsculas sem acentuação. A sequência contém pelo menos uma vogal.
Saída
Seu programa deve produzir uma única linha. Exibir ’S’ caso a risada seja das mais engraçadas,
ou ’N’ caso contrário.
Exemplos
Entrada
hahaha
riajkjdhhihhjak
a
huaauhahhuahau
Saída
S
N
S
S
Página 14 / 15
Aquecimento
W1 - Média
Arquivo: media.[c|cpp|java]
Faça um programa para calcular a média de 10 notas de alunos, e ao final imprima a maior nota e
a menor. Considere que a nota de cada aluno é informada pelo usuário, e a resposta é a média, com
uma casa decimal, bem como a maior e a menor.
Entrada
A entrada consiste de números inteiros, que correspondem as notas dos alunos.
Saída
Seu programa deve produzir uma saída para cada entrada, começando pelo valor da média, seguido
pela maior e depois pela menor, em linhas distintas.
Exemplo
Entrada
60 70 80 90 100 90 80 70 60 60
Saída
76.0
100
60
Página 15 / 15
Download