Você e seus amigos participam de um bolão online do jogo da final do campe- onato que acontecerá neste fim de semana. Você gostaria de definir sua aposta considerando a quantidade de jogadores titulares escalados, porém, a escalação só sai minutos antes do encerramento das apostas.
Conhecendo os números das camisetas dos jogadores titulares e sabendo que a numeração das camisetas não muda, você decide então codificar um programa para calcular a quantidade de jogadores titulares escalados e realizar a aposta. Seu programa deve ler do
teclado, primeiro os números das camisetas dos 11 jogadores titulares e depois os números dos jogadores escalados e, então, im- primir a quantidade de jogadores titulares que foram escalados.
Conhecendo os números das camisetas dos jogadores titulares e sabendo que a numeração das camisetas não muda, você decide então codificar um programa para calcular a quantidade de jogadores titulares escalados e realizar a aposta. Seu programa deve ler do
teclado, primeiro os números das camisetas dos 11 jogadores titulares e depois os números dos jogadores escalados e, então, im- primir a quantidade de jogadores titulares que foram escalados.
Passo 1
O enunciado dá as seguintes informações (o que você tem em mãos) e faz esta pergunta (o que é pedido):
- Dados que serão lidos do teclado: os números das camisas dos
jogadores titulares (primeira sequência de entrada). - Em seguida serão lidos os números dos jogadores escalados (segunda sequência de entrada). Vamos assumir também que são
números, um para cada posição, pois a descrição fala em aposta sobre a escalação titular. - O que se pede: imprimir a quantidade de jogadores titulares que foram escalados — isto é, quantos números da primeira sequência aparecem também na segunda sequência.
Passo 2
Ideia e método escolhido (explicação didática, sem pular etapas):
- O que queremos contar é a quantidade de elementos comuns entre duas coleções de números (os números das camisas).
- Uma maneira natural e eficiente de fazer isso é usar conjuntos (sets). Um conjunto armazena cada número apenas uma vez e permite testar se um elemento pertence ao conjunto de forma rápida.
- Se chamarmos o conjunto dos titulares de
e o conjunto dos escalados de , o número que queremos é o tamanho da interseção , isto é, a quantidade de elementos que pertencem a e também a . - Por que usar conjuntos? Porque a verificação “x está em A” com conjuntos costuma ser, em média, tempo constante, então evitaríamos checar cada elemento de uma lista contra todos da outra (o que seria mais lento).
Passo 3
Conceitos básicos explicados com calma (o que é um conjunto, interseção e por que funciona aqui):
- Conjunto: colecção sem repetição. Ex.: o conjunto
contém os números , e . Se uma lista tiver repetições, ao transformá-la em conjunto as repetições desaparecem. - Interseção: dados dois conjuntos
e , a interseção é o conjunto de elementos que estão em e em . Ex.: . - Tamanho de um conjunto:
denota quantos elementos o conjunto tem. Então o que queremos é . - Aplicação ao problema: se um número de camisa aparece nas duas listas, ele é contado uma vez na interseção — exatamente o que a pergunta pede: quantos titulares (únicos) foram escalados.
Passo 4
Algoritmo passo a passo (detalhado para implementar na prova/programa):
- Ler do teclado números até obter os
números dos titulares. Guardar esses números em um conjunto . - Detalhe prático: a entrada pode vir em uma linha ou em várias linhas; então é bom ler linhas e separar por espaços até completar
inteiros.
- Detalhe prático: a entrada pode vir em uma linha ou em várias linhas; então é bom ler linhas e separar por espaços até completar
- Ler do teclado números até obter os
números dos escalados. Guardar esses números em um conjunto . - Calcular a interseção
. - Calcular o tamanho dessa interseção:
. - Imprimir
como um inteiro (sem texto extra), que é a quantidade de titulares escalados.
Passo 5
Como fazer cada passo sem erro (truques na leitura e no trato dos dados):
- Leitura robusta: criar uma função que vai lendo linhas, quebrando em números com
.split()e convertendo para inteiro, acumulando até ternúmeros. - Converter a lista de titulares para conjunto imediatamente: isso garante unicidade e facilita testes de pertencimento.
- Converter a lista de escalados também para conjunto antes de intersectar.
- Se por acaso a entrada de escalados contiver repetidos (o enunciado diz que a numeração não muda, então normalmente não), usar conjunto evita contar repetidos duas vezes.
Passo 6
Exemplo numérico passo a passo para fixar (faça isso na prova se precisar checar lógica):
- Suponha titulares lidos:
— então . - Suponha escalados lidos:
— então . - Interseção:
. - Tamanho:
. - Resultado a imprimir:
.
Passo 7
Complexidade e por que é rápido (para te deixar confiante na prova):
- Convertendo cada lista em conjunto custa tempo linear no número de entradas; aqui são
e , então trivialmente rápido. - A operação de interseção também é linear no número de elementos do menor conjunto.
- Em resumo, tempo e memória são suficientes e simples para a escala do problema da prova.
Passo 8
Código de exemplo em Python (prático para submeter ou colar na prova se for permitido código; lê do teclado e imprime somente o inteiro pedido):
- O código abaixo lê
inteiros para titulares e inteiros para escalados, calcula a interseção e imprime o tamanho.
Resposta
def read_n_ints(n):
vals = []
while len(vals) < n:
vals += list(map(int, input().strip().split()))
return vals[:n]
vals = []
while len(vals) < n:
vals += list(map(int, input().strip().split()))
return vals[:n]
titulares = set(read_n_ints(11))
escalados = set(read_n_ints(11))
print(len(titulares & escalados))
escalados = set(read_n_ints(11))
print(len(titulares & escalados))