Tempo de resposta, Torneio de tênis, Zero para cancelar
Autor(es): Marcelo Henrique Ayala Gomes
Sara adora trocar mensagens com amigos. Como ela recebe e envia muitas mensagens, está preocupada com o tempo que seus amigos esperam para receber respostas das mensagens.
As seguintes regras de etiqueta são sempre obedecidas:
O aplicativo de mensagens que Sara e seus amigos usam recebe e envia mensagens instantaneamente. O envio e o recebimento de mensagens são chamados de eventos. O aplicativo registra cada evento na ordem em que os eventos ocorrem, usando dois tipos de registro:
O aplicativo usa ainda um outro tipo de registro, para indicar o tempo que se passou entre dois eventos consecutivos, na forma
Se não há registro do tipo T X entre dois registros de eventos consecutivos significa que exatamente 1 segundo se passou entre esses dois eventos.
O Tempo de Resposta de uma mensagem é o tempo que se passa entre o recebimento da mensagem por Sara e o envio da resposta a essa mensagem por Sara. Se um amigo recebeu respostas para todas as suas mensagens, o Tempo de Resposta Total para esse amigo é a soma dos Tempos de Respostas para as mensagens desse amigo; caso contrário o Tempo de Resposta Total para esse amigo é -1.
Dada a lista de registros do aplicativo de Sara, sua tarefa é determinar o Tempo de Resposta Total para cada amigo. Entrada
A primeira linha da entrada contém um inteiro N, o número de registros. Os amigos de Sara são identificados por números inteiros. Cada uma das N linhas seguintes descreve um registro e contém um caractere (R, E ou T) seguido de um número inteiro X. No caso de registros dos tipos R e E o valor de X indica um amigo de Sara; no caso do registro de tipo T, o valor de X indica o número de segundos que se passaram entre o evento anterior e o posterior. Saída
Para cada amigo de Sara seu programa deve produzir uma linha na saída contendo dois inteiros: o número do amigo e o Tempo de Resposta Total para esse amigo, em ordem crescente dos números dos amigos. Restrições
- 1 ≤ N ≤ 20
- 1 ≤ X ≤ 100 Informações sobre a pontuação
- Para um conjunto de casos de testes valendo 20 pontos, 1 ≤ N ≤ 10.
- Para um conjunto de casos de testes valendo 80 pontos, nenhuma restrição adicional.# Tempo de Resposta - correção
N = int(input())
records = [input().split() for _ in range(N)]
# coleciona todos os friends que aparecem (R ou E)
friends_set = set()
for tipo, x in records:
if tipo in ('R', 'E'):
friends_set.add(int(x))
# estruturas para controle
totais = {f: 0 for f in friends_set} # soma dos tempos por amigo
pendente = {} # amigo -> tempo_recebido se há mensagem sem resposta
last_event_time = 0
first_event = True
next_gap = 1 # intervalo (padrão) para o próximo evento
for tipo, xs in records:
x = int(xs)
if tipo == 'T':
# define o intervalo que será usado entre o último evento e o próximo evento
next_gap = x
else:
# calcula horário do evento atual
if first_event:
t = 0
first_event = False
else:
t = last_event_time + next_gap
# processa o evento
if tipo == 'R':
# registra recebimento (marca como pendente)
pendente[x] = t
else: # tipo == 'E'
if x in pendente:
totais[x] += t - pendente[x]
del pendente[x]
else:
# caso raro: E sem R prévio — mantemos total 0 (seguindo comportamento seguro)
pass
# atualiza controle de tempo
last_event_time = t
next_gap = 1 # volta ao padrão entre eventos
# impressão em ordem crescente dos amigos que apareceram
for amigo in sorted(friends_set):
if amigo in pendente:
print(f"{amigo} -1")
else:
print(f"{amigo} {totais[amigo]}")A prefeitura contratou um novo professor para ensinar as crianças do bairro a jogar tênis na quadra de tênis do parque municipal. O professor convidou todas as crianças do bairro interessadas em aprender a jogar tênis. Ao final do primeiro mês de aulas e treinamentos foi organizado um torneio em que cada participante disputou exatamente seis jogos. O professor vai usar o desempenho no torneio para separar as crianças em três grupos, de forma a ter grupos de treino em que os participantes tenham habilidades mais ou menos iguais, usando o seguinte critério:
Dada uma lista com o resultado dos jogos de um participante, escreva um programa para determinar em qual grupo ele será colocado.
A entrada consiste de seis linhas, cada linha indicando o resultado de um jogo do participante. Cada linha contém um único caractere: V se o participante venceu o jogo, ou P se o jogador perdeu o jogo. Não há empates nos jogos.
Seu programa deve produzir uma única linha na saída, contendo um único inteiro, identificando o grupo em que o participante será colocado. Se o participante não for colocado em nenhum dos três grupos seu programa deve imprimir o valor -1.
# Leitura de 6 resultados e contagem de vitórias
vitorias = 0
for _ in range(6):
resultado = input().strip().upper()
if resultado == 'V':
vitorias += 1
# Decisão do grupo
if vitorias >= 5:
print(1)
elif vitorias >= 3:
print(2)
elif vitorias >= 1:
print(3)
else:
print(-1)Seu chefe está ao telefone, nervoso. Ele quer que você compute a soma de uma sequência de números que ele vai falar para você ao telefone, para saber o total das vendas em sua mais recente viagem de negócios.
Infelizmente, de vez em quando seu chefe fala números errados para você ao telefone.
Felizmente, seu chefe rapidamente percebe que falou um número errado e diz "zero", que como combinado previamente quer dizer ignore o último número corrente.
Infelizmente, seu chefe pode cometer erros repetidos, e diz "zero" para cada erro.
Por exemplo, seu chefe pode falar ao telefone "Um, três, cinco, quatro, zero, zero, sete, zero, zero, seis", o que significa uma soma total igual a 7, conforme explicado na tabela abaixo:
| Fala do chefe | Números correntes | Explicação |
|---|---|---|
| "um, três, cinco, quatro" | 1,3,5,4 | registre os quatro números |
| "zero, zero" | 1, 3 | ignore os dois últimos números |
| "sete" | 1, 3, 7 | registre o sete ao final da lista |
| "zero, zero" | 1 | ignore os dois últimos números |
| "seis" | 1, 6 | registre seis ao final da lista |
Para não deixar seu chefe ainda mais nervoso, escreva um programa que determine a soma total dos números falados por seu chefe ao telefone.
A primeira linha da entrada contém um inteiro N, a quantidade de números inteiros (incluindo os "zeros") que o seu chefe falou ao telefone. Cada uma das N linhas seguintes contém um número inteiro Xi.
Seu programa deve produzir uma única linha na saída, contendo um único inteiro, a soma correta dos números, levando em conta que o valor 0 significa erro, conforme descrito. Restrições
# Versão sem imports
N = int(input())
stack = []
for _ in range(N):
x = int(input())
if x == 0:
if stack:
stack.pop()
else:
stack.append(x)
print(sum(stack))