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