247 – Círculos de Ligação
Se você já viu comerciais de companhias telefônicas, você deve ter notado que muitas
companhias gastam muito dinheiro tentando convencer as pessoas que elas proveem o
melhor serviço e com o menor preço. Uma companhia possui “círculos de ligação”: você
provê uma lista de pessoas com quem você conversa frequentemente e se você ligar para
alguém no seu círculo de ligação (que também seja um cliente da mesma companhia), você
pagará muito menos do que se estivesse ligando para alguém de fora do seu círculo.
Outra companhia destacou que você só receberá grandes descontos se ligar para pessoas no
seu círculo e se você começar a ligar para outras pessoas com mais frequência, caberá a você
adicioná-las ao seu círculo de ligações.
A companhia LibertyBell Phone é a nova companhia que alega ter o melhor plano de
ligações que poderá tirar as outras companhias do negócio. LibertyBell tem círculos de
ligação, a diferença é que a companhia estabelece automaticamente o seu círculo de
ligações. Isto funciona da seguinte maneira: LibertyBell mantém o registro de todas as suas
ligações. Além de você mesmo, seu círculo de ligações consiste de todas as pessoas para
quem você liga e também te ligam (direta ou indiretamente). Por exemplo, se Ben liga para
Alexander, Alexander liga para Dolly, e Dolly liga para Ben, eles estarão todos no mesmo
círculo. Se Dolly também ligar para Benedict e Benedic ligar para Dolly, então, Benedict
estará no mesmo círculo de ligações de Dolly, Ben e Alexander. Finalmente, se Alexander
liga para Aaron, mas Aaron não liga para Alexander, Ben, Dolly ou Benedict, então Aaron
não estará no círculo.
Você foi contratado pela LibertyBell para escrever um programa que determine os círculos
de ligação dado o registro de ligações entre pessoas.
Entrada
A entrada conterá um ou mais casos de teste. Cada caso de teste inicia com uma linha
contendo dois inteiros, n e m. O primeiro inteiro, n, representa o número de diferentes
pessoas que estão no caso de teste. O valor máximo para n é 25. O restante do caso de teste
conterá m linhas, cada uma representando uma ligação telefônica. Cada ligação é
representada por dois nomes, separados por um único espaço em branco. Cada nome é
composto por uma única palavra, formada por caracteres alfabéticos com no máximo 25
letras. Por exemplo, se Ben ligou para Dolly, então esta ligação será representada como
“Ben Dolly”. A entrada deste problema será encerrada com dois valores zero (0) para n e m.
Saída
Para cada caso de teste, imprimia uma linha de cabeçalho indicando o número do caso de
teste, seguida por uma linha com cada círculo de ligação no caso de teste. Cada uma dessas
linhas deverá conter o nome de todas as pessoas (em qualquer ordem) dentro do círculo,
separadas por uma vírgula e um espaço em branco.
Exemplo de Entrada
5 6 Ben Alexander Alexander Dolly Dolly Ben Dolly Benedict Benedict Dolly Alexander Aaron 14 34 John Aaron Aaron Benedict Betsy John Betsy Ringo Ringo Dolly Benedict Paul John Betsy John Aaron Benedict George Dolly Ringo Paul Martha George Ben Alexander George Betsy Ringo Alexander Stephen Martha Stephen Benedict Alexander Stephen Paul Betsy Ringo Quincy Martha Ben Patrick Betsy Ringo Patrick Stephen Paul Alexander Patrick Ben Stephen Quincy Ringo Betsy Betsy Benedict Betsy Benedict Betsy Benedict Betsy Benedict Betsy Benedict Betsy Benedict Quincy Martha 0 0Exemplo de Saída
Calling circles for data set 1: Ben, Alexander, Dolly, Benedict Aaron
Calling circles for data set 2: John, Betsy, Ringo, Dolly Aaron
Benedict
Paul, George, Martha, Ben, Alexander, Stephen, Quincy, Patrick
550 – Multiplicando por Rotações
Aviso: nem todos os números deste problema são decimais!
A multiplicação de números naturais, em geral, é uma operação enfadonha. Porém, em
alguns casos, o produto pode ser obtido movendo-se o último dígito para a frente.
Exemplo: 179487 * 4 = 717948
É claro que esta propriedade depende da representação numérica usada. No exemplo
acima foi utilizada a representação decimal. Na base 9 há um exemplo mais curto:
17 * 4 = 71 (base 9)
sendo (9 * 1 + 7) * 4 = 7 * 9 + 1
Entrada
Cada linha da entrada consistirá de três números separados por um espaço em branco:
a base do sistema numérico, o dígito menos significante do primeiro fator, e o segundo
fator. Este segundo fator é composto por um único dígito (e menor do que a base). A
entrada é encerrada por um “fim de arquivo”.
Saída
Seu programa deverá determinar para cada linha da entrada o número de dígitos do
menor fator com a propriedade da multiplicação rotativa. Para cada linha de entrada
imprimia uma linha com este número de dígitos.
Exemplo de Entrada
10 7 4 9 7 4 17 14 12Exemplo de Saída
6 2 4573 – A Lesma
Uma lesma está na base (fundo) de um poço e deseja escalá-lo até o topo. A lesma pode escalar 3 pés durante o dia, mas desliza um pé enquanto dorme. A lesma tem um fator de fadiga de 10%, significando que a cada dia consecutivo de escalada ela escala 10% x 3 = 0,3 pés a menos do que no dia anteiro (os 10% são sempre calculados em relação à altura que ela consegue escalar no primeiro dia). Em que dia a lesma conseguirá escalar o poço? Por exemplo, quando a lesma conseguirá passar por um poço de 6 pés de altura? (um dia consiste de um período de sol mais o período da noite). Como pode ser visto na tabela a seguir, a lesma passa dos 6 pés durante o terceiro dia.
Dia Altura Inicial Distância Percorrida Altura Após Escalada 1 0' 3' 3' 2 2' 2.7' 4.7' 3 3.7' 2.4' 6.1'
Seu trabalho é resolver o problema geral de escalada da lesma. Dependendo dos parâmetros, a lesma conseguirá escalar o poço ou irá, eventualmente, escorregar até a base do poço. Isto é, a altura atingida pela lesma irá superar a altura do poço ou irá cair até ficar negativa. Você deverá identificar o que ocorrerá primeiro e em que dia.
Entrada
A entrada consistirá de um ou mais casos de teste. Cada caso em uma linha. Cada linha conterá quatro inteiros H, U, D e F, separados por um único espaço em branco. A entrada será encerrada com H recebendo o valor zero. Caso contrário, todos os números receberão valores entre 1 e 100. H é a altura do poço em pés, U é a distância em pés que a lesma consegue escalar durante o dia, D é a distância em pés que a lesma escorrega durante a noite, e F é o fator de fadiga expresso em porcentagem. A lesma nunca escala uma distância negativa. Se o fator de fadiga levar a distância escalada para um valor negativo então a lesma não escalará nada durante o dia. Independente do quanto a lesma escale em um dado dia, ela sempre escorregará D pés durante a noite.
Saída
Para cada caso de teste, imprima uma linha indicando se a lesma conseguiu deixar o poço ou falhou (escorregou de volta para o fundo) e em que dia isso aconteceu. O formato deve ser idêntico ao dos exemplos a seguir.
Exemplo de Entrada
6 3 1 10 10 2 1 50 50 5 3 14 50 6 4 1 50 6 3 1 1 1 1 1 0 0 0 0Exemplo de Saída
success on day 3 failure on day 4 failure on day 7 failure on day 68 success on day 20 failure on day 2628 – Senhas
Alguém que tem diversas contas em vários servidores precisa se lembrar de várias senhas. De vez em quando essa pessoa esquece suas senhas. Imagine que ela se lembra apenas que a senha é composta pelas palavras x, y, z e por dois dígitos: um no começo e outro no final da senha.
Sua tarefa é escrever um programa que irá gerar todas as senhas possíveis com base num dicionário dado e um conjunto de regras. Para o exemplo dado acima, o dicionário contém três palavras: x, y, z e a regra dada é 0#0 que significa <digit><word_from_the_dictionary><digit>.
Entrada
A primeira linha contém o número de palavras no dicionário (n). As palavras propriamente ditas serão dadas nas n linhas consecutivas. A linha seguinte conterá o número de regras (m). Similarmente, as m linhas consecutivas conterão as regras. Cada regra consiste de caracteres “#” e “0” em um ordem arbitrária. O caractere “#” significa uma palavra do dicionário enquanto que o caractere “0” significa um dígito.
A entrada pode ser composta por diversos dicionários com regras associadas a eles.
Saída
Para cada conjunto “dicionário + regras” você deverá imprimir dois hifens seguidos por um enter e todas as senhas possíveis nas linhas consecutivas. As senhas deverão ser ordenadas pelas regras, isto é, primeiro todas as senhas que satisfazem a primeira regra, seguidas por aquelas que satisfazem a segunda, etc. Dentro do conjunto de senhas que satisfazem uma regra, elas devem ser ordenadas em ordem ascendente.
Assuma que: o número de palavras no dicionário é maior que zero e menor ou igual a 100. O
tamanho de cada palavra é maior que zero e menor que 256. Uma palavra pode conter os seguintes caracteres: “A”..“Z”, “a”..“z”, “0”..“9”. O número de regras será menor que 1000, e uma regra terá menos que 256 caracteres. Um caractere “0” pode ocorrer numa regra no máximo 7 vezes, mas irá ocorrer ao menos uma vez. É possível a existência de regras sem a presença do caractere “#”.
Exemplo de Entrada 2 root 2super 1 #0 1 admin 1 #0# Exemplo de Saída -- root0 root1 root2 root3 root4 root5 root6 root7 root8 root9 2super0 2super1 2super2 2super3 2super4 2super5 2super6 2super7 2super8 2super9 -- admin0admin admin1admin admin2admin admin3admin admin4admin admin5admin admin6admin admin7admin admin8admin admin9admin
871 – Contando Células
Conhecimento Geral
Considere um grid bidimensional de células, cada uma podendo estar vazia ou preenchida. Células preenchidas formam bolhas. Células preenchidas adjacentes formam uma bolha maior. Duas células são consideradas adjacentes se elas forem conectadas na horizontal, vertical ou diagonal. Poderá haver diversas bolhas no grid. Seu trabalho é encontrar a maior bolha (em termos de número de células) no grid.
A seguinte figura ilustra um grid com três bolhas (a maior contém cinco células)
Problema:
Escreva um programa que determine o tamanho da maior bolha para um dado conjunto de bolhas.
Entrada:
A entrada iniciará com um inteiro positivo indicando o número de casos de teste. Cada caso de teste é descrito a seguir. A linha inicial é seguida por uma linha em branco e também haverá uma linha em branco entre dois casos de teste consecutivos.
O grid é passado como um conjunto de strings, cada uma composta por zeros e uns. O valor 1 indica que a célula está preenchida e o valor 0 indica que a célula está vazia. O maior grid possível terá tamanho 25 x 25.
Saída
Para cada caso de teste, imprima o tamanho da maior bolha. Imprima uma linha em branco entre dois casos de teste.