• Nenhum resultado encontrado

Defesa do Trabalho 1 Algoritmos 1

N/A
N/A
Protected

Academic year: 2021

Share "Defesa do Trabalho 1 Algoritmos 1"

Copied!
6
0
0

Texto

(1)

Defesa do Trabalho 1 – Algoritmos 1

Esta defesa é composta por 3 exercícios do Trabalho 1;

Os exercícios a serem resolvidos são diferentes para cada aluno. O aluno deverá fazer os

exercícios indicados com seu respectivo nome;

Esta defesa inicia às 20h35 e finaliza às 22h10

Está vedada a consulta a materiais impressos, digitais e internet;

Os manuais do sistema, via man, estão disponíveis;

Segue também, neste pdf, os pseudo-códigos de funções que podem auxiliar em algum

exercício;

Nota

Exercícios Resolvidos Nota

3

Mantém a nota do trabalho

2

Reduz 30% da nota do trabalho

1

A nota do trabalho será igual a P2

0

Zero

algorithm separa(A, p, r) is     c:=A[p]     i:= p+1     j:= r     enquanto i <= j faça         se A[i] <= c então i++         senão se c < A[j] então j­­         senão       troca(A[i],A[j])       i++,j­­     A[p]:= A[j]     A[j]:= c     return j intercala (int p, int q, int r, int v[]) { int i, j, k, *w; w = mallocc ((r­p) * sizeof (int)); for (i = p; i < q; ++i)  w[i­p] = v[i]; for (j = q; j < r; ++j)  w[r­p+q­j­1] =  v[j]; i = 0; j = r­p­1; for (k = p; k < r; ++k) if (w[i] <= w[j]) v[k] = w[i++]; else v[k] = w[j­­]; free (w); }

r

i

m

o

\

f

o

o

t

n

o

t

e

{

h

t

t

p

:

/

/

e

n

.

w

i

k

i

p

e

d

i

a

.

o

r

g

/

w

i

k

i

/

I

l

l

e

g

a

l

\

_

(2)

PAO07 - Păo a metro (Janderson, Henrique, Luan)

Pão a metro é um tipo de sanduíche gigante que é uma excelente opção de lanche para torneios de programação, embora a experiência já tenha mostrado que o oferecimento de sanduiches pode gerar reclamação dos

competidores. Outro grande problema é que algumas pessoas são mais gulosas que outras e, dessa maneira, acabam pegando pedaços maiores que os pedaços dos outros. Para a final da OBI, a coordenação estava pensando em providenciar pão a metro para os competidores, porém tais problemas os fizeram recuar na idéia.

Embora a idéia tenha sido momentaneamente abandonada, uma idéia simples surgiu: cortar previamente o pão em fatias de tamanho iguais e distribuí-las entre as pessoas. O único problema com tal idéia é que se o número de pessoas for muito grande, fica impraticável ter apenas um pão. Por exemplo, se quisermos que 1.000 pessoas recebam 20 centímetros de sanduíche, seria necessário um sanduíche de 20.000 centímetros, ou 200 metros! Alguém levantou a seguinte hipótese: se houvessem N pessoas e fossem encomendados K sanduíches de empresas diferentes, cada qual com uma determinada metragem (tamanho) Mi (1 ≤ i ≤ K), seria possível retirar desses pães N fatias de mesmo tamanho, possivelmente sobrando partes nao utilizadas. A questão seria: qual o tamanho inteiro máximo que essas fatias poderão ter?

Por exemplo, se tivermos K = 4, com os tamanhos (em centímetros) M1 = 120, M2 = 89, M3 = 230 e M4 = 177 e N = 10, podemos retirar N fatias iguais de tamanho máximo 57, pois assim conseguimos 2 fatias no primeiro pão, 1 no segundo, 4 no terceiro e 3 no quarto, totalizando as 10 fatias necessárias. Se tentarmos cortar fatias de tamanho 58, só será possível obter 3 fatias do terceiro pão, totalizando 9 e, portanto, 57 é realmente o melhor que podemos obter. Note que não podemos usar duas ou mais fatias menores de diferentes pães para formarmos uma fatia do tamanho selecionado. (ficaria muito deselegante dar um lanche recortado `às pessoas).

Tarefa

Escreva um programa que, dados os tamanhos de pão disponíveis (em centímetros) e a quantidade de pessoas a serem atendidas, retorne o tamanho inteiro máximo (em centímetros) da fatia que pode ser cortada de maneira a atender todas as pessoas.

Entrada

A entrada contém um único conjunto de testes, que deve ser lido do dispositivo de entrada padrão (normalmente o teclado). A primeira linha da entrada contém um inteiro N que indica a quantidade pessoas (1 ≤ N ≤ 10.000). A segunda linha contém um inteiro K (1 ≤ K ≤ 10.000) que é a quantidade de sanduíches disponível. Na terceira linha há K inteiros M (1 ≤ M ≤ 10.000) separados por um espaço em branco representando o tamanho de cada pão.

Saída

Seu programa deve imprimir, na saída padrão, uma única linha, contendo o tamanho inteiro máximo da fatia que pode ser cortada.

Exemplos

Entrada:

10 4 120 89 230 177

Saída:

57

Entrada:

3 2 45 85

Saída:

42

Entrada:

7 7 100 98 99 505 102 97 101

Saída:

101

(3)

ONP - Transform the Expression (Todos)

Na notação usual de expressões aritméticas, os operadores são escritos entre os operandos; por isso,

a notação é chamada infixa. Na notação posfixa, ou polonesa, os operadores são escritos depois dos

operandos. Eis alguns exemplos de expressões infixas e correspondentes expressões posfixas:

infixa

posfixa

(A+B*C)

ABC*+

(A*(B+C)/D-E)

ABC+*D/E-(A+B*(C-D*(E-F)-G*H)-I*3)

ABCDEF-*-GH*-*+I3*-(A+B*C/D*E-F)

ABC*D/E*+F-(A+B+C*D-E*F*G)

AB+CD*+EF*G*-(A+(B-(C+(D-(E+F)))))

ABCDEF+-+-+

(A*(B+(C*(D+(E*(F+G))))))

ABCDEFG+*+*+*

Note que os operandos (A, B, C, etc.) aparecem na mesma ordem na expressão infixa e na

correspondente expressão posfixa. Note também que a notação posfixa dispensa parênteses e regras

de precedência entre operadores (como a precedência de * sobre + por exemplo), que são

indispensáveis na notação infixa.

Transform the algebraic expression with brackets into RPN form (Reverse Polish Notation).

Two-argument operators: +, -, *, /, ^ (priority from the lowest to the highest), brackets ( ). Operands: only

letters: a,b,...,z. Assume that there is only one RPN form (no expressions like a*b*c).

Input

t [the number of expressions <= 100]

expression [length <= 400]

[other expressions]

Text grouped in [ ] does not appear in the input file.

Output

The expressions in RPN form, one per line.

Example

Input:

3 (a+(b*c)) ((a+b)*(z+x)) ((a+t)*((b+(a+c))^(c+d)))

Output:

abc*+ ab+zx+* at+bac++cd+^*

(4)

ROBOCOL - Robô colecionador (Gabriel, Henrique, Luan)

Um dos esportes favoritos na Robolândia é o Rali dos Robôs. Este rali é praticado em uma arena retangular gigante de N linhas por M colunas de células quadradas. Algumas das células estão vazias, algumas contêm figurinhas da Copa (muito apreciadas pelas inteligências artificiais da Robolândia) e algumas são ocupadas por pilastras que sustentam o teto da arena. Em seu percurso os robôs podem ocupar qualquer célula da arena, exceto as que contém pilastras, que bloqueiam o seu movimento. O percurso do robô na arena durante o rali é

determinado por uma sequência de instruções. Cada instrução é representada por um dos seguintes caracteres: ‘D’, ‘E’ e ‘F’, significando, respectivamente, “gire 90 graus para a direita”, “gire 90 graus para a esquerda” e “ande uma célula para a frente”. O robô começa o rali em uma posição inicial na arena e segue fielmente a sequência de instruções dada (afinal, eles são robôs!). Sempre que o robô ocupa uma célula que contém uma figurinha da Copa ele a coleta. As figurinhas da Copa não são repostas, ou seja, cada figurinha pode ser coletada uma unica vez. Quando um robô tenta andar para uma célula onde existe uma pilastra ele patina, permanecendo na célula onde estava, com a mesma orientação. O mesmo também acontece quando um robô tenta sair da arena.

Dados o mapa da arena, descrevendo a posição de pilastras e figurinhas, e a sequência de instruções de um robô, você deve escrever um programa para determinar o número de figurinhas coletadas pelo robô.

Entrada

A entrada contém vários casos de teste. A primeira linha de um caso de teste contém três números inteiros N, M e S (1 ≤ N, M ≤ 100, 1 ≤ S ≤ 5 × 104 ), separados por espaços em branco, indicando respectivamente o número de linhas e o número de colunas da arena e o número de instruções para o robô. Cada uma das N linhas seguintes da entrada descreve uma linha de células da arena e contém uma cadeia com M caracteres. A primeira linha que aparece na descrição da arena é a que está mais ao Norte; a primeira coluna que aparece na descrição de uma linha de células da arena é a que está mais a Oeste.

Cada célula da arena pode conter um dos seguintes caracteres: ‘.’ — célula normal; ‘*’ — célula que contém uma figurinha da Copa; ‘#’ — célula que contém uma pilastra; ‘N’, ‘S’, ‘L’, ‘O’ — célula onde o robô inicia o percurso (única na arena).  A letra representa a orientação inicial do robô (Norte, Sul, Leste e Oeste,  respectivamente).

A ultima linha da entrada contém uma sequência de S caracteres dentre ‘D’, ‘E’ e ‘F’, representando as instruções do robô.

O último caso de teste é seguido por uma linha que contém apenas três números zero separados por um espaço em branco.

Saída

Para cada rali descrito na entrada seu programa deve imprimir uma única linha contendo um único inteiro, indicando o número de figurinhas que o robô colecionou durante o rali.

(5)

Exemplo Entrada: 3 3 2 *** *N* *** DE 4 4 5 ...# *#O. *.*. *.#. FFEFF 10 10 20 ....*... ...*.. ...*.... ..*.#... ...#N.*..* ...*... ... ... ... ... FDFFFFFFEEFFFFFFEFDF 0 0 0 Saída: 0 1 3

(6)

PROIBIDO - Número Proibido (Gabriel, Janderson)

Os números proibidos são números que possuem alguma representação problemática, por exemplo, número do azar, de algo ruim, e até números que são senhas do governo.

O número proibido mais conhecido é um número primo[1] que foi descoberto em 2001 e representa o arquivo binário da versão compactada do código C que implementa o algoritmo DeCSS, que pode ser utilizado para lograr o sistema de proteção do DVD.

Luan, um rapaz que tem muito receio de ser procurado por agências espiãs internacionais coletou um conjunto de números ilegais e está filtrando esses números de todos os seus arquivos no computador.

Infelizmente, Luan ainda não sabe programar muito bem e pediu a sua ajuda para implementar um programa que receba um conjunto de números ilegais e responda se um outro conjunto de números fazem parte dos números ilegais.

[1]http://en.wikipedia.org/wiki/Illegal_prime

Entrada

A entrada é composta por um único caso teste que possui diversas linhas. A primeira linha possui um número N ( 1 <= N <= 140000 ) que representa a quantidade de números proibidos existentes. A segunda linha do caso de teste possui N números Pi ( 0 <= Pi <= 231 ) representando os números proibidos.

Depois existirão diversas linhas contendo um único número que se quer saber se é proibido ou não. A entrada termina em EOF.

Saída

Para cada número da consulta deve-se imprimir uma única linha contendo a palavra sim se o número for proibido, ou nao caso o número não seja proibido.

Exemplo

Entrada: 7 10 0 50 25 121 0 3000 1 2 3 10 0 Saída: nao nao nao sim sim

Referências

Documentos relacionados

(D) “os sistemas nacionais de instrução foram concebidos como imensas máquinas de transmissão do saber constituído” (linhas 9-11).. Em relação ao emprego dos sinais

Todo este trabalho foi acompanhado e supervisionado pela Comissão de Auditoria da Sociedade que, desde a sua consti- tuição, inicialmente como comissão especifica dentro do Conselho

A primeira avaliação será realizada pelo enfermeiro, que o encaminhará ao médico após suas condutas iniciais (Deliberação COREN-MG -65/00 - anexo VII, p. As trocas das

Equipamentos de emergência imediatamente acessíveis, com instruções de utilização. Assegurar-se que os lava- olhos e os chuveiros de segurança estejam próximos ao local de

Conforme apontado anteriormente, quando os resultados da busca na base Scopus sobre Gestão do Conhecimento são filtrados para destacar os documentos

SI’s avançados são usados como opção para a exposição de pacientes aos estímulos fóbicos realizando a exposição a AV’s que simulam os estímulos eliciadores de ansiedade

Esse estudo teve o objetivo de estimar parâmetros genéticos para escore de temperamento de bovinos da raça Nelore, entre os quais a correlação genética desta

As irmãs, tendo notícia da sentença, de joelhos, pediram ao rei que a perdoasse, pois se Amanda havia contado o sonho, foi porque lho tinha sido ordenado; que elas duas lhe