OBI2014 Caderno de Tarefas

Documentos relacionados
Simulado OBI2018 Caderno de Tarefas

OBI2016 Caderno de Tarefas

OBI2017 Caderno de Tarefas

OBI2016 Caderno de Tarefas

OBI2012 Caderno de Tarefas

OBI2015 Caderno de Tarefas

OBI2016 Caderno de Tarefas

MODALIDADE PROGRAMAÇÃO 1ª FASE

OBI2012 Caderno de Tarefas

OBI2016 Caderno de Tarefas

OBI2016 Caderno de Tarefas

OBI2014 Caderno de Tarefas

OBI2011 Caderno de Tarefas

Maratona de Programação da SBC 2015

OBI2007 Caderno de Tarefas

OBI2014 Caderno de Tarefas

OBI2012 Caderno de Tarefas

OBI2013 Caderno de Tarefas

OBI2012 Caderno de Tarefas

OBI2013 Caderno de Tarefas

OBI2010 Caderno de Tarefas

OBI2014 Caderno de Tarefas

OPI Modalidade Programação. Fase 1

Caderno de Problemas. 09 de Abril de 2011 A PROVA TEM DURAÇÃO DE 3 HORAS

II MARATONA DE PROGRAMAÇÃO IFSP SÃO CARLOS. Caderno de Tarefas. 25 de outubro de 2012

OBI2010 Caderno de Tarefas

OBI2009 Caderno de Tarefas

OBI2012 Caderno de Tarefas

OBI2016 Caderno de Tarefas

OBI2005 Caderno de Tarefas

1ª LISTA DE EXERCÍCIOS

Linguagem C. André Tavares da Silva.

Aula 3 PROFESSOR TUTA

Universidade Federal do ABC MCTA Programação Estruturada 2018.Q3

OBI2010 Caderno de Tarefas

Maratona de Programação da SBC 2017

OBI2016 Caderno de Tarefas

Linguagem C ESTRUTURA DE CONTROLE

Caderno de Exercícios Aula 2 (Variáveis, Tipos e Comandos Básicos)

Exercícios: Vetores e Matrizes

Linguagem C Entrada/Saída (console)

CADERNO DE QUESTÕES. A competição terá uma duração de 4 horas (13hs às 17hs) e é composta de uma série de problemas listados neste caderno.

OBI2006 Caderno de Tarefas

Warmup para a 5 a Seletiva da UFPR 8 de Agosto de 2014

Comandos de entrada. e saída. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada.

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Universidade Veiga de Almeida Algoritmos e Linguagem I

Olimpíada Brasileira de Informática OBI2008 Programação Nível Júnior Fase 2 1. Auto Estrada. Nome do arquivo fonte: auto.c, auto.cpp ou auto.

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

LISTA DE EXERCÍCIOS - ro. 04

Programação científica C++

II TORNEIO DE PROGRAMAÇÃO

Descrição da Linguagem Pascal Jr.

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

OBI2014 Caderno de Tarefas

Passo-a-passo para desenvolver um Programa usando a Linguagem Python

Exercícios: Arquivos

Ferramenta automática de correção de códigos em C Elgio Schlemer Setembro de 2017

08/09/10. Atividade Supervisionada: Programação de Computadores. Profa.: Alessandra Bussador

Programação de Computadores 1 Lista 2. Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP

Aula 3 Primeiros programas

Laboratório de Programação A Exercícios sobre vetores e matrizes

OBI2008 Caderno de Tarefas

OBI2011 Caderno de Tarefas

OBI2017 Caderno de Tarefas

INFORMÁTICA APLICADA AULA 02 ALGORITMOS

Working 03 : Conceitos Básicos II

Sistemas Operacionais e Introdução à Programação. Introdução à Lógica de Programação: estruturas de repetição

3.1 - Funções para manipular dados de entrada e saída padrão

Explicação do programa:

Aula 3 Constantes e funções de E/S

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Sexta Aula Prática - 28 de abril de 2011

Variáveis, Tipos de Dados e Operadores

Vetores são estruturas indexadas utilizadas para armazenar dados de um mesmo tipo: int, char, float ou double. Oexemploaseguirédeumvetordeinteiros:

Capítulo 6: Arquivos

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

Aula 4 Introdução ao C

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Linguagem de Programação

Vetores. e o programa deverá ler os valores separadamente:

3. Linguagem de Programação C

Elementos básicos das linguagens de programação

GEQ Prof. Paulo R. Coelho. Lista para prova

5ª Lista de Exercícios de Programação I

Seleção de Problemas:

Transcrição:

OBI2014 Caderno de Tarefas Modalidade Programação Nível 1, Fase 2 30 de agosto de 2014 A PROVA TEM DURAÇÃO DE 4 HORAS Promoção: Patrocínio:

Olimpíada Brasileira de Informática OBI2014 1 Instruções LEIA ATENTAMENTE ESTAS INSTRUÇÕES ANTES DE INICIAR A PROVA Este caderno de tarefas é composto por 6 páginas (não contando a folha de rosto), numeradas de 1 a 6. Verifique se o caderno está completo. A prova deve ser feita individualmente. É proibido consultar a Internet, livros, anotações ou qualquer outro material durante a prova. É permitida a consulta ao help do ambiente de programação se este estiver disponível. As tarefas têm o mesmo valor na correção. A correção é automatizada, portanto siga atentamente as exigências da tarefa quanto ao formato da entrada e saída de seu programa. 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. As tarefas não estão ordenadas, neste caderno, por ordem de dificuldade; procure resolver primeiro as questões mais fáceis. Preste muita atenção no nome dos arquivos fonte indicados nas tarefas. Soluções na linguagem C devem ser arquivos com sufixo.c; soluções na linguagem C++ devem ser arquivos com sufixo.cc ou.cpp; soluções na linguagem Pascal devem ser arquivos com sufixo.pas; soluções na linguagem Java devem ser arquivos com sufixo.java e a classe principal deve ter o mesmo nome do arquivo fonte; e soluções na linguagem Python devem ser arquivos com sufixo.py. Para problemas diferentes você pode escolher trabalhar com linguagens diferentes, mas apenas uma solução, em uma única linguagem, deve ser submetida para cada problema. Ao final da prova, para cada solução que você queira submeter para correção, copie o arquivo fonte para o seu diretório de trabalho ou disquete, conforme especificado pelo seu professor. Não utilize arquivos para entrada ou saída. Todos os dados devem ser lidos da entrada padrão (normalmente é o teclado) e escritos na saída padrão (normalmente é a tela). Utilize as funções padrão para entrada e saída de dados: em Pascal: readln, read, writeln, write; em C: scanf, getchar, printf, putchar; em C++: as mesmas de C ou os objetos cout e cin. em Java: qualquer classe ou função padrão, como por exemplo Scanner, BufferedReader, BufferedWriter e System.out.println em Python: read,readline,readlines,print,write Procure resolver o problema de maneira eficiente. Na correção, eficiência também será levada em conta. As soluções serão testadas com outras entradas além das apresentadas como exemplo nas tarefas.

Olimpíada Brasileira de Informática OBI2014 2 Decifra Nome do arquivo fonte: decifra.c, decifra.cpp, decifra.pas, decifra.java, ou decifra.py Dimas é um renomado investigador de roubos a antiguidades e obras de arte, que sempre é chamado para casos intrigantes que necessitam de bastante trabalho mental. Desta vez, o quadro que sumiu de um conhecido museu na França foi a Donalisa, do pintor Leonardo da Silva. Este é um caso bastante especial, visto que o ladrão deixou uma frase escrita na parede, aparentemente criptografada. Que desafio para Dimas! É que ele não tem muito conhecimento nessa área de criptografia. Porém, ele usou de suas excelentes observações e conseguiu perceber que a frase foi escrita através de alguma permutação inversível do alfabeto. Uma permutação inversível do alfabeto é apenas uma troca entre suas letras, duas a duas. Por exemplo, todo a será trocado por m e, portanto, todo m será trocado por a. Dessa forma, veja que dado um texto original, se aplicarmos a permutação, teremos uma frase criptografada; e se aplicarmos a mesma permutação novamente, teremos o texto original recuperado! Apesar de parecer fácil, a tradução se tornou uma tarefa difícil, já que a frase é bastante longa. É por isso que Dimas resolveu pedir sua ajuda, um exímio programador, para traduzir a frase criptografada, recuperando o texto original, e resolver o mistério! A primeira linha da entrada contém uma sequência de 26 letras minúsculas distintas, representando a permutação inversível usada na frase criptografada. A permutação é a seguinte: a letra a é trocada pela primeira letra dessa sequência; a letra b é trocada pela segunda letra dessa sequência; a letra c pela terceira; e assim por diante, seguindo a sequência padrão do alfabeto: abcdefghijklmnopqrstuvwxyz. A segunda linha da entrada consiste de uma frase criptografada, contendo apenas letras minúsculas. Seu programa deve imprimir o texto original, de acordo com a permutação fornecida. A frase criptografada não excede 10 4 caracteres. zcbedfghljkinmypqrutsvwxoa bzedzeymziluz cadeadonalisa iohmunlcawygdfbqpvxzerjskt haufhaimihbdqezihib cienciadacomputacao

Olimpíada Brasileira de Informática OBI2014 3 Quadrado Nome do arquivo fonte: quadrado.c, quadrado.cpp, quadrado.pas, quadrado.java, ou quadrado.py Um quadrado quase mágico, de dimensões N N, é um quadrado que obedece à seguinte condição. Existe um número inteiro positivo M tal que: para qualquer linha, a soma dos números da linha é igual a M; e para qualquer coluna, a soma dos números da coluna é também igual a M. O quadrado seria mágico, e não apenas quase mágico, se a soma das diagonais também fosse M. Por exemplo, a figura abaixo, parte (a), apresenta um quadrado quase mágico onde M = 21. 4 9 3 6 11 2 6 6 4 11 4 3 6 (a) (b) Laura construiu um quadrado quase mágico e alterou, propositalmente, um dos números! Nesta tarefa, você deve escrever um programa que, dado o quadrado quase mágico alterado por Laura, descubra qual era o número original antes da alteração e qual número foi colocado no lugar. Por exemplo, na parte (b) da figura, o número original era 1, que Laura alterou para. A primeira linha da entrada contém apenas um número N, representando a dimensão do quadrado. As N linhas seguintes contêm, cada uma, N números inteiros, definindo o quadrado. A entrada é garantidamente um quadrado quase mágico onde exatamente um número foi alterado. Seu programa deve imprimir apenas uma linha contendo dois números: primeiro o número original e depois o número que Laura colocou no seu lugar. 3 N 50; e o valor de todos os números está entre 1 e 10000 3 3 6 6 6 4 3 1 4 16 3 2 13 5 10 11 6 12 4 15 14 1 9

Olimpíada Brasileira de Informática OBI2014 4 Corredor Nome do arquivo fonte: corredor.c, corredor.cpp, corredor.pas, corredor.java, ou corredor.py Bruninho está programando um personagem virtual para o próximo desafio de um jogo de aventura em que, numa das fases, o personagem tem que entrar em um corredor, percorrer algumas salas e depois sair do corredor. Ele pode entrar apenas uma vez, e passar por cada sala apenas uma vez. Todas as salas possuem uma porta de entrada e uma de saída, como ilustra a parte (a) da figura abaixo. Ao passar por uma sala o jogador ganha um certo número de vidas (que pode ser negativo!). O objetivo é passar pelo corredor coletando a maior quantidade possível de vidas! Por sorte, sempre existe ao menos uma sala onde se ganha um número positivo de vidas. 1 2 3 4 5 6 1 2 3 4 5 6 2 5 1 11 3 2 5 1 11 3 (a) (b) No exemplo acima, o personagem de Bruninho pode ganhar, no máximo, 12 vidas, por exemplo, entrando pela sala 2 e saindo pela sala 4, como mostrado na parte (b) da figura. Nesta tarefa, você deve escrever um programa que, dados os números de vidas correspondentes a cada sala do corredor, calcule a quantidade máxima de vidas que será possível ganhar. A entrada é composta por duas linhas. A primeira linha contém um inteiro N, o número de salas no corredor. A segunda linha contém N números inteiros, positivos ou negativos, indicando a quantidade de vidas que se ganha em cada sala. Seu programa deve imprimir uma linha, com o número máximo de vidas que é possível ganhar. 1 N 50000; e o número de vidas nas salas está entre 100 e 100 Informações sobre a Pontuação Em um conjunto de casos de teste totalizando 30 pontos, N 1000-2 5-1 -11 3 12 10 50 42-35 2-60 5 30-1 40 31 105

Olimpíada Brasileira de Informática OBI2014 5 Jogo da Memória Nome do arquivo fonte: memoria.c, memoria.cpp, memoria.pas, memoria.java, ou memoria.py Pedro e Paulo resolveram complicar um pouco o tradicional Jogo da Memória, em que os jogadores precisam virar duas cartas iguais. Eles colocam as cartas no chão, viradas para baixo, e fazem algumas linhas ligando pares de cartas, usando giz, de modo que para qualquer par de cartas (A, B) existe uma e apenas uma sequência de cartas distintas que leva de A até B através das linhas que eles desenharam. Com isso, ao virar duas cartas, o jogador ganha uma quantidade de pontos igual ao tamanho da sequência de linhas entre as duas cartas, se elas forem iguais. Se forem diferentes, o jogador perde aquela quantidade de pontos. Pedro e Paulo, agora, estão estudando qual é a melhor estratégia para esse jogo e precisam da sua ajuda para resolver uma tarefa específica: dadas as ligações entre as N cartas, calcular a soma dos tamanhos das sequências entre todos os N/2 pares de cartas iguais! O jogo possui N cartas, de índices 1 até N. Cada carta possui a figura de um número de 1 até N/2 desenhada. Exatamente duas cartas possuem a figura de cada número entre 1 e N/2. A primeira linha da entrada contém o número de cartas N. A segunda linha da entrada contém N inteiros C i, 1 i N, indicando qual número está anotado na carta de índice i. Cada uma das N 1 linhas seguintes contém dois números A e B, indicando que existe uma linha desenhada entre as cartas de índices A e B. Seu programa deve imprimir uma linha contendo um inteiro, a soma dos tamanhos das sequências entre todos os N/2 pares de cartas iguais. 2 N 50000, N é par 1 C i N/2 1 A N e 1 B N Informações sobre a Pontuação Em um conjunto de casos de teste valendo 50 pontos, N 1000 6 2 2 1 1 3 3 1 2 3 4 6 5 2 6 3 6 3

Olimpíada Brasileira de Informática OBI2014 6 1 2 3 3 2 4 1 4 1 2 2 3 2 6 5 6 6 4 12