5 Carga Pesada A companhia Big Jonhsson Trucks é especializada na construção de grandes caminhões. Seu último modelo, o Godzilla V12, é tão grande que a quantidade de carga que ele pode transportar nunca é limitada pela capacidade do caminhão. Ela é sempre limitado pelas restrições legais relacionadas às rodovias nas quais o caminhão precisará passar. Dadas uma cidade de origem e uma de destino, seu trabalho é determinar a carga máxima que o Godzilla V12 poderá ter de forma que exista um caminho válido entre estas duas cidades. A entrada conterá um ou mais casos de teste. A primeira linha de cada caso de teste conterá dois inteiros: o número de cidades n (1 < n < 201) e o número de segmentos de ruas r (0 < r < 19901), formando a rede de ruas. As r linhas seguintes, conterão em cada a descrição de um segmento de rua, indicando quais são as duas cidades conectadas por esse segmento e dando o peso máximo que poderá ser carregado pelo caminhão neste segmento. Os nomes das cidades não terão mais de 30 caracteres e não contêm espaços em branco. Os limites de peso dos segmentos serão valores inteiros de 0 a 10.000. Todas as ruas serão mão dupla. A última linha de cada caso de teste conterá o nome de duas cidades: origem e destino. A entrada será encerrada com dois valores zero (0) para n e r. Para cada caso de teste imprima três linhas: Uma linha dizendo: Scenario #X onde x é o número do caso de teste; Uma linha dizendo: y tons onde y é a carga máxima; Uma linha em branco. Exemplo de 3 Karlsruhe Stuttgart 100 Stuttgart Ulm 80 Ulm Muenchen 120 Karlsruhe Muenchen 5 5 Karlsruhe Stuttgart 100 Stuttgart Ulm 80 Ulm Muenchen 120 Karlsruhe Hamburg 220 Hamburg Muenchen 170 Muenchen Karlsruhe 0 0 Exemplo de Scenario #1 80 tons Scenario #2 170 tons
63 Polígono Programas modernos de computação gráfica podem, entre outras coisas mais impressionantes, preencher uma região fechada. Apesar de que nem todos prevenirem o usuário de acidentalmente escolher o preenchimento do fundo ao invés de uma parte interna de uma figura. O hobby favorito do seu chefe é colorir figuras e por isso você precisará adicionar essa funcionalidade ao programa gráfico que ele usa. Ou seja, seu trabalho é escrever um programa que determine se um ponto pertence a um polígono, dado um arranjo dos vértices do polígono. Para simplificar o problema, assuma que: Todas as arestas do polígono são segmentos verticais ou horizontais; O tamanho de todas as arestas do polígono é par; As coordenadas de ao menos um vértice corresponde a números inteiros ímpares; Ambas as coordenadas de qualquer vértice não podem ser divisíveis por 7 ao mesmo tempo; O ponto P a ser verificado possuí suas duas coordenadas representadas por inteiros pares; O polígono não terá mais que 1000 vértices; Coordenadas dos vértices valerão de -10.000 a 10.000. A entrada conterá diversos casos de teste, cada caso de teste será iniciado com o número de vértices do polígono (n). As n linhas consecutivas conterão as coordenadas dos vértices (coordenada x seguida pela coordenada y). Então haverá as coordenadas do ponto P. A entrada será encerrada pelo valor zero (0) para o número de vértices do polígono. Para cada caso de teste, imprima uma linha com um único caractere: T caso o ponto P pertença ao polígono ou F, caso contrário. Exemplo de 1 1 1 3 3 3 3 1 2 2 12 1 1 1 9 3 9 3 5 5 5 5 9 7 9 7 1 5 1 5 3 3 3 3 1 2 0 Exemplo de T F
86 Passos Alguém caminha através de valores inteiros numa linha reta. O tamanho do passo precisa ser não negativo e precisará ser uma unidade acima, igual ou uma unidade abaixo do tamanho do passo anterior. Qual o número mínimo de passos para se chegar de x até y? O tamanho do primeiro e do último passo deve ser 1. e A entrada iniciará com uma linha contendo n, o número de casos de teste. Para cada caso de teste haverá uma linha com dois inteiros 0 x y < 2 31. Para cada caso de teste, imprima uma linha dando o número mínimo de passos necessários para sair de x e chegar em y. Exemplo de 3 5 8 5 9 5 50 Exemplo de 3 3
908 Reconectando Computadores Considere o problema de selecionar um conjunto de T linhas de alta velocidade para conectar N computadores, de um universo de M linhas de alta velocidade, sendo que cada uma conecta um par de computadores. Cada linha possui um custo mensal dado, e o objetivo é minimizar o custo total para se conectar N computadores, onde o custo total é dado pela soma do custo de cada uma das linhas selecionadas. Considere ainda que este problema foi resolvido mais cedo para um conjunto de N computadores e M linhas de alta velocidade, mas um pequeno conjunto de novas linhas (K) se tornou disponível recentemente. Seu objetivo é computador o custo do novo conjunto T que poderá ter um custo inferior ao do conjunto T, por meio da adição de linhas do conjunto K já que agora você tem disponíveis M + K linhas. A entrada conterá vários casos de teste, cada um deles utilizando a descrição a seguir. Casos de teste consecutivos serão separados por uma linha em branco. A entrada é organizada da seguinte maneira: Uma linha contendo o número N de computadores, sendo 1 N 1000000, e cada computador é identificado por um número i, 1 i N; O conjunto T de linhas de alta velocidade previamente escolhidas consiste de N-1 linhas, cada uma descrevendo uma conexão e contendo os números de dois computadores conectados por essa linha e o custo mensal de se usar a linha. Todos os custos serão expressos por valores inteiros; Uma linha contendo o número K de linhas adicionais 1 K 10; K linhas, cada uma descrevendo uma nova linha de alta velocidade, e contendo os números dos computadores ligados pela linha e o custo mensal de se usar essa linha; Uma linha contendo o número M de linhas de alta velocidade originalmente disponíveis, com N 1 M N*(N-1)/2; M linhas, cada uma descrevendo uma das linhas de alta velocidade originalmente disponíveis, contendo os números dos computadores ligados pela linha e seu custo mensal. Para cada caso de teste, a saída deverá estar de acordo com a seguinte descrição. Duas saídas consecutivas deverão ser separadas por uma linha em branco. Para cada caso de teste você deverá imprimir o custo original de se conectar os N computadores dispondo das M linhas de conexão de alta velocidade e outra linha contendo o novo custo de se conectar os N computadores, dispondo das M + K linhas de alta velocidade. Se o novo custo for igual ao anterior, o mesmo valor deverá ser impresso duas vezes.
Exemplo de 5 1 2 5 1 3 5 1 5 1 5 5 1 2 3 2 6 1 2 5 1 3 5 1 5 1 5 5 3 8 5 8 Exemplo de 20 17
991 Cumprimentos Seguros Como qualquer pessoa minimamente supersticiosa sabe bem, coisas terríveis acontecem quando quatro pessoas apertam as mãos (para se cumprimentar) de maneira cruzada. Você, um intrépido estudante de computação, recebeu a tarefa de acalmar essas pessoas provendo a elas o conjunto possível de apertos de mão que incluem todas as pessoas em um dado grupo e, ao mesmo tempo, evita qualquer cruzamento. A seguinte figura ilustra o caso para três pares de pessoas: A entrada para este problema contém diversos casos de teste separados por uma linha em branco. Cada caso de teste contém apenas um inteiro n, correspondendo ao número de pares de pessoas no grupo, sendo 1 n 10. Para cada caso de entrada, imprima uma linha contendo um inteiro indicando o número de possíveis cumprimentos que não se cruzam e que envolvam todas as pessoas do grupo. Imprima uma linha em branco entre dois casos de teste. Exemplo de Exemplo de 1
1586 Massa Molar Um composto orgânico é qualquer membro de uma grande classe de compostos cujas moléculas contêm carbono. A massa molar de compostos orgânicos é a massa de uma molécula desse composto. Essa massa molar pode ser computada a partir dos pesos atômicos padrões de seus elementos. Dado um composto orgânico definido por sua fórmula, o doutor Chon quer descobrir sua massa molar. Uma fórmula molecular, como C3HO3, identifica cada elemento constituinte da molécula utilizando o símbolo químico dos elementos que a compõe. Se uma molécula contém mais de um átomo de algum elemento, esta quantidade é indicada usando um número em subscrito após o símbolo químico. Para este problema, assuma que a fórmula molecular é representada por apenas quatro elementos: C (carbono), H (hidrogênio), O (oxigênio), e N (nitrogênio). A seguinte tabela apresenta o peso atômico padrão deste elementos: Dada uma fórmula molecular, escreva um programa que compute a massa molar da respectiva fórmula. A entrada consiste de T casos de teste. O número de casos de teste T é dado na primeira linha da entrada. Cada caso de teste contém uma única linha, a qual possui a fórmula molecular como uma string. Cada símbolo químico é dado por uma letra maiúscula e o tamanho da string será maior que 0 (zero) e menor que 80. A quantidade de átomos n associada a cada elemento químico será omitida quando houver apenas um átomo do respectivo elemento, para os demais casos esta quantidade será representada por um número após o símbolo do elemento e este número valerá entre 2 e 99. Seu programa deverá imprimir uma linha por caso de teste. A linha deverá conter a massa molar da respectiva fórmula molecular. Observe as casas decimais utilizadas no exemplo de saída. Exemplo de C C6H5OH NH2CH2COOH C12H22O11 Exemplo de 12.010 9.108 75.070 32.296