OPEI 2021 - Senior
B. Festival de Presentes
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Aproximando-se do ano novo, uns grupos de amigos resolvem fazer o tradicional festival de presentes. Considerando um grupo de amigos que vão dar presentes entre si, queremos determinar quanto cada amigo ganhou (ou perdeu) considerando o valor que ele deu de presente pra seus amigos (dividindo igualmente) e o quanto ele recebeu de seus amigos. Porém, nesses grupos de amigos, algumas pessoas vão ter mais conhecidos que outras. Dado um grupo de amigos, o dinheiro que cada pessoa do grupo vai usar pra presentear e dividir igualmente entre os amigos que ela escolheu presentear, crie o programa que responde quanto cada pessoa do grupo ganhou (ou perdeu).

Este problema envolve determinar, para um grupo de amigos que se dão presentes, quanto cada pessoa dá a mais do que recebe (e vice-versa para aqueles que vêem dar presentes com cinismo). Neste problema, cada pessoa reserva algum dinheiro para dar presentes e divide esse dinheiro igualmente entre todos aqueles a quem são dados presentes. No entanto, em qualquer grupo de amigos, algumas pessoas dão mais do que outras (ou pelo menos podem ter mais conhecidos) e algumas pessoas têm mais dinheiro do que outras. Dado um grupo de amigos, o dinheiro que cada pessoa do grupo gasta em presentes e uma (sub) lista de amigos a quem cada pessoa dá presentes; você deve escrever um programa que determina quanto mais (ou menos) cada pessoa no grupo dá do que recebe.

Input

A primeira linha de entrada será a quantidade de grupos a serem examinados. Logo, teremos uma sequência de grupos de amigos do festival de presentes. Cada grupo consiste de várias linhas:

  • Uma linha contendo o número de pessoas no grupo;
  • Uma nova linha com a lista dos nomes de cada pessoa do grupo;
  • Uma nova linha para cada pessoa no grupo consistindo de: nome da pessoa, a quantidade de dinheiro que essa pessoa usará pra presentear, o número de pessoas a quem os presentes são dados e os nomes das pessoas do grupo a quem os presentes são dados.
Todos os nomes são letras minúsculas, não há mais de 10 pessoas em um grupo e nenhum nome tem mais de 12 caracteres. O dinheiro é um número inteiro, não negativo e menor que 2.000. A entrada consiste em um ou mais grupos e termina no fim do arquivo.
Output

Para cada grupo do festival de presentes, imprima, para cada pessoa do grupo, o nome da pessoa seguido pelo ganho (ou perda) recebido (ou gasto) por ela. Cada linha de pessoa deve ser impressa na mesma ordem em que aparecem pela primeira vez na entrada.

A saída de cada grupo deve ser separada de outros grupos por uma linha em branco. Todos os presentes são inteiros. Então, cada pessoa pegará o valor que ela reservou para os presentes e dividirá igualmente entre as pessoas destinadas, dando o máximo possível que não passe do valor definido. Qualquer dinheiro que sobre nessa divisão será mantido e irá fazer parte do "valor líquido" final impresso na saída dessa pessoa.

Example
Input
2
5
andre clara gabriel vitoria matheus
andre 200 3 clara gabriel vitoria
gabriel 500 1 andre
matheus 150 2 vitoria gabriel
clara 0 2 matheus vitoria
vitoria 0 0
3
liz joao andre
liz 30 1 joao
joao 55 2 liz andre
andre 0 2 joao liz
Output
andre 302
clara 66
gabriel -359
vitoria 141
matheus -150

liz -3
joao -24
andre 27

C. RobôCIn
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

O RobôCIn, grupo de pesquisa do Centro de Informática da UFPE que usa a robótica para resolver problemas, está desenvolvendo um novo projeto. Nesse projeto, eles criaram um robô que se locomove por um dado um tabuleiro retangular utilizando uma sequência de instruções. Porém, eles precisam de ajuda para descobrir onde o robô estará, considerando as dimensões do tabuleiro, a posição inicial do robô e o conjunto de instruções. A posição do robô consiste em um par de coordenadas x e y, que são inteiros, e uma orientação (N, S, L, O para norte, sul, leste e oeste) que indica pra qual lado o robô está virado no momento. Uma instrução para o robô é uma sequência de letras que pode ser "E", "D" e "F" que significam, respectivamente, as instruções:

  • Esquerda: o robô virará 90 graus para a esquerda e permanecerá na mesma posição do tabuleiro.
  • Direita: o robô virará 90 graus para a direita e permanecerá na mesma posição do tabuleiro.
  • Frente: o robô avança para a próxima posição do tabuleiro na direção da orientação atual dele. Por exemplo, se a orientação atual dele é N (norte), a instrução F levaria o robô da posição (x, y) para a posição (x, y + 1).
Como o tabuleiro é retangular e limitado, caso o robô se mova para uma posição além dos limites, ele irá cair no abismo dos robôs. Sabendo disso, os alunos do RobôCIn implementaram, nos robôs, um sistema de aviso. Se um robô for cair para fora da área do tabuleiro, ele automaticamente marcará a posição que o levou a esse triste final. Dessa forma, os próximos robôs irão apenas ignorar uma instrução que o leve a cair a partir da mesma posição.
Input

A primeira linha da entrada consiste nas coordenadas do canto superior direito. Assume-se que a posição (0,0) dele é o canto inferior esquerdo. A próxima linha contem a quantidade de robôs que o time do RobôCIn ira treinar, em ordem. Então, para cada robô, serão duas linhas. Na primeira a posição e orientação inicial. E, na segunda, a sequência de comandos que o robô deve ler.

Output

Para cada robô (conjunto de posição e instruções) da entrada, você deve imprimir a posição final dele no tabuleiro seguido de sua orientação final, todos separados por um espaço em branco e uma quebra de linha no final. Se um robô cair da borda do tabuleiro, deve imprimir a palavra "PERDIDO" após a posição e orientação, na mesma linha.

Example
Input
5 3
3
1 1 L
DFDFDFDF
3 2 N
FDDFEEFFDDFEE
0 3 O
EEFFFEFEFE
Output
1 1 L
3 3 N PERDIDO
2 3 S
Note

* Uma posição consiste de dois inteiros que especificam as coordenadas iniciais do robô seguida de uma orientação (N, S, L, O), todos separados por um espaço em branco na mesma linha. Uma instrução do robô é uma sequência de letras 'L', 'R' e 'F' em uma linha.

* No tabuleiro, apenas um robô pode andar de cada vez, ou seja, primeiro você precisa processar toda a sequência de um robô antes de ir para o próximo. Você pode assumir que todas as posições iniciais do robô estão dentro dos limites do tabuleiro especificado. O valor máximo para qualquer coordenada é 50. Todas as strings de instrução terão menos de 100 e pelo menos 1 caracteres de comprimento.

D. Desafio no centro
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Em um belo dia no centro de Recife, você se depara com um desafio proposto pela prefeitura para capturar as mentes mais brilhantes do centro. Chegando mais perto, a organização lhe explicou qual era o desafio:

Você tinha alguns segundos para informar uma sequencia de dígitos, definida pela seguinte formula:

  • f(1) = "1"
  • f(n) = como você leria a sequencia de dígitos de f(n-1), que é então convertida para uma sequencia diferente.

Para determinar como você leria a sequencia de dígitos, divida ela no mínimo de grupos possível, tal que cada grupo contenha uma parte contígua de mesmos dígitos. Então, para cada grupo, leia o numero de dígitos seguido do digito. Para converter numa string de dígitos, concatena a leitura de cada palavra.

Por exemplo, a leitura e conversão para a string de dígitos "3322251": Dois 3, três 2, um 5 e um 1 -> 2 3 + 3 2 + 1 5 + 1 1 -> "23321511"

Dado um inteiro positivo n, retorna a sequencia de dígitos de n.

Input

Uma linha contendo um número n (1 <= n <= 30)

Output

Uma linha contendo apenas os dígitos referente ao número n.

Examples
Input
1
Output
1
Input
4
Output
1211

E. Fofoca na RMR
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

A fama internacional de Recife como a capital dos fofoqueiros vem ganhando o cenário nesses últimos dias. A Organização Mundial da Fofoca (OMF), planejando testar as capacidades do povo recifense, criou o desafio de descobrir até onde uma notícia chega partindo de uma única pessoa em um bairro de Recife. Sabendo que cada pessoa que recebe a notícia irá, no próximo dia, fofocar para todos os seus amigos próximos e estes, no dia seguinte, fofocarão para seus outros amigos, assim por diante, o desafio da OMF planeja determinar duas coisas:

  • O maior número de pessoas que, em um único dia, ouviram a notícia pela primeira vez.
  • O primeiro dia em que ocorreu o maior número de pessoas a ouvirem a notícia pela primeira vez.
Escreva um programa que, dadas as relações de amizade entre as pessoas do bairro e a fonte da fofoca (primeira pessoa a divulgar a informação), calcule e responda os dois pontos acima.
Input

A primeira linha da entrada contém o número M de moradores (1 ≤ M ≤ 2500). Os moradores são enumerados de 0 a M-1. Cada uma das M linhas seguintes especifica o conjunto de amigos de um morador (do morador 0 até o morador M-1). Cada um desses conjuntos de amigos contém: o número de amigos (0 ≤ A < 15), seguido por A inteiros distintos que representam os amigos do morador. Todos esses inteiros são separados por um único espaço. A próxima linha contém um inteiro T (1 ≤ T < 60), que é o número de casos de teste. E cada uma das T linhas a seguir contém um inteiro que representa um morador (de 0 a M-1), que seria a fonte da notícia (o iniciador da fofoca) no caso teste.

Output

A saída consiste em T linhas, uma para cada caso de teste. Se nenhum morador (exceto a fonte) ouvir a fofoca, a linha de saída deverá printar o inteiro '0'. Caso contrário, a linha deve conter dois inteiro: F e D, separados por um único espaço, onde F é o máximo de pessoas a ouvirem a fofoca pela primeira vez em um único dia e D é o primeiro dia em que esse máximo ocorreu.

Example
Input
6
2 1 2
2 3 4
3 0 4 5
1 4
0
2 0 2
3
0
4
5
Output
3 2
0
2 1