Você está na página 1de 10

OBI2012 Caderno de Tarefas

Modalidade Programao Nvel 2, Fase 2


12 de maio de 2012 A PROVA TEM DURAO DE 5 HORAS

Promoo:

Patrocnio:

v1.0

Olimpada Brasileira de Informtica OBI2012

Instrues
LEIA ATENTAMENTE ESTAS INSTRUES ANTES DE INICIAR A PROVA
Este caderno de tarefas composto por 9 pginas (no contando a folha de rosto), numeradas de 1 a 9. Verique se o caderno est completo. A prova deve ser feita individualmente. proibido consultar a Internet, livros, anotaes ou qualquer outro material durante a prova. permitida a consulta ao help do ambiente de programao se este estiver disponvel. As tarefas tm o mesmo valor na correo. A correo automatizada, portanto siga atentamente as exigncias da tarefa quanto ao formato da entrada e sada de seu programa. No implemente nenhum recurso grco nas suas solues (janelas, menus, etc.), nem utilize qualquer rotina para limpar a tela ou posicionar o cursor. As tarefas no esto ordenadas, neste caderno, por ordem de diculdade; procure resolver primeiro as questes mais fceis. Preste muita ateno no nome dos arquivos fonte indicados nas tarefas. Solues na linguagem C devem ser arquivos com suxo .c; solues na linguagem C++ devem ser arquivos com suxo .cc ou .cpp; solues na linguagem Pascal devem ser arquivos com suxo .pas; solues na linguagem Java devem ser arquivos com suxo .java e a classe principal deve ter o mesmo nome do arquivo fonte; e solues na linguagem Python devem ser arquivos com suxo .py. Para problemas diferentes voc pode escolher trabalhar com linguagens diferentes, mas apenas uma soluo, em uma nica linguagem, deve ser submetida para cada problema. Ao nal da prova, para cada soluo que voc queira submeter para correo, copie o arquivo fonte para o seu diretrio de trabalho ou disquete, conforme especicado pelo seu professor. No utilize arquivos para entrada ou sada. Todos os dados devem ser lidos da entrada padro (normalmente o teclado) e escritos na sada padro (normalmente a tela). Utilize as funes padro para entrada e sada 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 funo padro, como por exemplo Scanner, BueredReader, BueredWriter e System.out.println em Python: read,readline,readlines,print,write Procure resolver o problema de maneira eciente. Na correo, ecincia tambm ser levada em conta. As solues sero testadas com outras entradas alm das apresentadas como exemplo nas tarefas.

Olimpada Brasileira de Informtica OBI2012

lbum de fotos
Nome do arquivo fonte: album.c, album.cpp, album.pas, album.java, ou album.py Clara est organizando as fotos da sua ltima viagem num lbum de fotos. Como ela tem muitas fotos, para economizar pginas do lbum ela quer colar duas fotos por pgina do lbum. Como as fotos so retangulares, as fotos podem ser coladas giradas (mas sempre com lados paralelos aos da pgina do lbum, para preservar o equilbrio esttico do lbum), mas elas devem sempre car inteiramente contidas no interior da pgina, e no devem se sobrepor. Em geral, das muitas formas de posicionar as fotos do lbum s algumas (ou nenhuma) satisfazem estas restries, ento pode ser difcil decidir se possvel colar as duas fotos em uma mesma pgina do lbum, e por isso Clara pediu a sua ajuda para escrever um programa que, dadas as dimenses da pgina e das fotos, decide se possvel colar as fotos na pgina. Por exemplo, cada pgina pode ser 5 7, e duas fotos so 3 4. Nesse caso, possvel colar as duas fotos:

5
4 3

7
4 3

Entrada
A primeira linha da entrada contm dois inteiros X e Y , indicando a largura e a altura da pgina do lbum. Cada uma das duas linhas seguintes contm dois inteiros L e H, indicando a largura e a altura das fotos.

Sada
Imprima uma nica linha, contendo um nico caractere: S, se possvel colar as duas fotos na pgina do lbum, e N, caso contrrio.

Restries
1 X, Y 1000 1 L, H 1000

Olimpada Brasileira de Informtica OBI2012

Exemplos
Entrada 7 5 3 4 3 4 Sada S

Entrada 10 10 6 6 6 6

Sada N

Entrada 13 8 4 9 6 5

Sada N

Olimpada Brasileira de Informtica OBI2012

Soma das casas


Nome do arquivo fonte: soma.c, soma.cpp, soma.pas, soma.java, ou soma.py Joozinho mora em uma rua que tem N casas. Marquinhos o melhor amigo dele, mas sempre gosta de pregar peas em Joozinho. Desta vez, ele pegou os dois brinquedos prediletos de Joozinho e os escondeu em duas casas distintas da rua. Em compensao, Marquinhos deu uma dica importante para Joozinho: A soma dos nmeros das casas em que escondi teus brinquedos igual a K. Alm disso, escolhi as casas de tal forma que no existe outro par de casas cuja soma tenha esse mesmo valor. Sabendo disto, encontre qual o par de casas em que se encontram os brinquedos de Joozinho. Para auxiliar seu amigo, Marquinhos entregou a Joozinho uma lista com o nmero das casas j em ordem crescente (isto , do menor para o maior nmero).

Entrada
A primeira primeira linha da entrada contm um nmero inteiro N , que representa o nmero de casas que existem na rua. Cada uma das N linhas seguintes contm um nmero inteiro, representando o nmero de uma casa. Note que esses N nmeros esto ordenados, do menor para o maior. A ltima linha da entrada contm um inteiro K, que a soma dos nmeros das duas casas onde os brinquedos esto escondidos.

Sada
Se programa deve imprimir uma nica linha, contendo dois inteiros, A e B, A < B, que representam os nmeros das casas em que esto escondidos os brinquedos. Os dois nmeros devem ser separados por um espao em branco.

Informaes sobre a pontuao


Em um conjunto de casos que totaliza 30 pontos, N 103 .

Restries
2 N 105 Para cada casa Ci , 0 Ci 109 , i = 1, 2, . . . , N Os nmeros das casas esto em ordem crescente, do menor para o maior nmero, e casas distintas tm nmeros distintos.

Olimpada Brasileira de Informtica OBI2012

Exemplos
Entrada 4 1 2 3 5 8 Sada 3 5

Entrada 4 1 2 3 5 5

Sada 2 3

Olimpada Brasileira de Informtica OBI2012

Bomba
Nome do arquivo fonte: bomba.c, bomba.cpp, bomba.pas, bomba.java, ou bomba.py Um terrorista internacional telefonou avisando que h uma bomba a bordo de um dos diversos nibus interestaduais da Nlognia. Essa bomba explodir se, por qualquer motivo, o nibus for obrigado a parar. O esquadro anti-bombas j se posicionou na estrada para desarmar a bomba em movimento, mas o nibus est prestes a entrar na capital da Nlognia, Nlogpolis, e precisa sair de l para o esquadro poder desarmar o artefato. Por questes de segurana, o esquadro anti-bombas somente pode desarmar o artefato fora da capital. No projeto urbano de Nlogpolis, todas as intersees consistem de rotatrias, de forma que os veculos nunca precisam parar nas intersees. Em compensao, toda rua (que tem mo nica e sempre liga duas rotatrias) possui uma faixa de pedestres com um semforo; enquanto alguns semforos abrem nos minutos mltiplos de 3 e fecham nos demais, outros fecham nos minutos mltiplos de 3 e abrem nos demais. Todas as ruas de Nlogpolis foram projetadas de tal forma que sempre levam exatamente um minuto para serem percorridas. O nibus vai entrar em Nlogpolis exatamente meio-dia em ponto em uma das rotatrias, e deve sair por outra rotatria especca para encontrar o esquadro anti-bombas na estrada. O comandante da polcia local lhe pediu que escreva um programa que determina o menor tempo necessrio para que o nibus saia da cidade, pela rotatria especca de sada. Note que o nibus pode ser forado a parar em um semforo, por falta de alternativas adequadas, e nesse caso a bomba explodir. Ele tambm pode car circulando indenidamente pela cidade, e nesse caso eventualmente ter que parar por falta de combustvel (e a bomba explodir).

Entrada
A primeira linha da entrada contm quatro inteiros N , E, S, M , indicando, respectivamente, o nmero de rotatrias (numeradas de 0 a N 1), o nmero da rotatria de entrada do nibus, o nmero da rotatria de sada do nibus e o nmero de ruas da cidade. Cada uma das M linhas seguintes contm trs inteiros A, B e T , indicando respectivamente a rotatria de origem da rua, a rotatria de destino da rua e a temporizao do semforo daquela rua: T = 1 se o semforo daquela rua abre nos minutos mltiplos de 3, e T = 0 se o semforo daquela rua fecha nos minutos mltiplos de 3.

Sada
Imprima uma nica linha contendo um nico nmero inteiro, o menor tempo necessrio em minutos para que o nibus saia da cidade ileso. Se for impossvel evitar a exploso do nibus, imprima uma nica linha contendo o caractere *.

Restries
2 N 500 1 M 2000 0 E, S N 1 pode haver at duas ruas de uma rotatria A para outra B (possivelmente igual a A), mas no caso de haver duas ruas, ento numa o semforo abre nos minutos mltiplos de 3, na outra o semforo fecha nos minutos mltiplos de 3.

Olimpada Brasileira de Informtica OBI2012

Exemplos
Entrada 6 0 1 1 2 2 3 5 5 1 2 2 3 4 0 0 4 7 0 0 1 1 0 0 1 Sada 8

Entrada 4 0 1 2 2 0 1 2 3 0 3 4 1 0 1 0

Sada *

Olimpada Brasileira de Informtica OBI2012

Banco
Nome do arquivo fonte: banco.c, banco.cpp, banco.pas, banco.java, ou banco.py A legislao em vigor obriga os bancos a iniciarem o atendimento a um cliente em no mximo 20 minutos aps a entrada do cliente na la nica da agncia bancria. A la nica, assim um caixa livre solicita ao primeiro cliente da la que venha ao seu guich para ser atendido. (Vamos ignorar aqui o problema dos clientes prioritrios, idosos, gestantes, portadores de necessidades especiais, etc.) Estamos supondo tambm que nenhum caixa atende dois clientes ao mesmo tempo. Seu programa receber o nmero de caixas ativas na agncia, o nmero de clientes e, para cada cliente, duas informaes, a saber, o momento de entrada do cliente na la, e a durao do atendimento daquele cliente. Inicialmente todos os caixas esto vazios, j que a agncia acabou de abrir. Seu problema determinar o nmero de clientes que esperaro mais de 20 minutos para ter seu atendimento iniciado.

Entrada
A primeira linha da entrada contm dois inteiros separados por um espao em branco. O primeiro, C, o nmero de caixas ativas na agncia bancria. O segundo, N , o nmero de clientes que procuraro atendimento na agncia naquele dia. As prximas N linhas tero cada uma informaes sobre um cliente, consistindo de dois inteiros, T e D, separados por um espao em branco. O inteiro T fornece o momento em que o cliente entra na la, em minutos, a partir do instante de abertura da agncia. O inteiro D fornece, em minutos, o tempo necessrio para atender o cliente. As linhas esto ordenadas por entrada dos clientes na la.

Sada
A sada dever conter apenas uma linha, contendo um nico inteiro, o nmero de clientes cujo atendimento ser iniciado mais do que 20 minutos aps sua entrada na la.

Restries
1 C 10 1 N 1000 0 T 300 1 D 10

Olimpada Brasileira de Informtica OBI2012

Exemplos
Entrada 1 5 0 10 0 10 1 10 2 10 30 10 Sada 1

Entrada 3 16 0 10 0 10 0 10 3 10 5 10 7 10 11 10 13 10 14 10 15 10 16 10 17 10 18 3 19 10 20 10 23 3

Sada 2

Você também pode gostar