Algorithm
Problem Name: beecrowd | 2879
Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/2879
Desvendando Monty Hall
Por Maratona de Programação da SBC 2018 Brazil
Timelimit: 1
No palco de um programa de auditório há três portas fechadas: porta 1, porta 2 e porta 3. Atrás de uma dessas portas há um carro, atrás de cada uma das outras duas portas há um bode. A produção do programa sorteia aleatoriamente a porta onde vai estar o carro, sem trapaça. Somente o apresentador do programa sabe onde está o carro. Ele pede para o jogador escolher uma das portas. Veja que agora, como só há um carro, atrás de pelo menos uma entre as duas portas que o jogador não escolheu, tem que haver um bode!
Portanto, o apresentador sempre pode fazer o seguinte: entre as duas portas que o jogador não escolheu, ele abre uma que tenha um bode, de modo que o jogador e os espectadores possam ver o bode. O apresentador, agora, pergunta ao jogador: “você quer trocar sua porta pela outra porta que ainda está fechada?”. E vantajoso trocar ou não? O jogador quer ficar com a porta que tem o carro, claro!
Paulinho viu uma demonstração rigorosa de que a probabilidade de o carro estar atrás da porta que o jogador escolheu inicialmente é 1/3 e a probabilidade de o carro estar atrás da outra porta, que ainda está fechada e que o jogador não escolheu inicialmente, é 2/3 e, portanto, a troca é vantajosa. Paulinho não se conforma, sua intuição lhe diz que tanto faz, que a probabilidade é 1/2 para ambas as portas ainda fechadas...
Neste problema, para acabar com a dúvida do Paulinho, vamos simular esse jogo milhares de vezes e contar quantas vezes o jogador ganhou o carro. Vamos supor que:
• O jogador sempre escolhe inicialmente a porta 1;
• O jogador sempre troca de porta, depois que o apresentador revela um bode abrindo uma das duas portas que não foram escolhidas inicialmente.
Nessas condições, em um jogo, dado o número da porta que contém o carro, veja que podemos saber exatamente se o jogador vai ganhar ou não o carro.
Entrada
A primeira linha da entrada contém um inteiro N (1 ≤ N ≤ 104 ), indicando o número de jogos na simulação. Cada uma das N linhas seguintes contém um inteiro: 1, 2 ou 3; representando o número da porta que contém o carro naquele jogo.
Saída
Seu programa deve produzir uma única linha, contendo um inteiro representando o número de vezes que o jogador ganhou o carro nessa simulação, supondo que ele sempre escolhe inicialmente a porta 1 e sempre troca de porta depois que o apresentador revela um bode abrindo uma das duas portas que não foram escolhidas inicialmente.
Exemplos de Entrada | Exemplos de Saída |
5 1 3 2 2 1 |
3 |
1 1 |
0 |
15 3 2 3 1 1 3 3 2 2 1 2 3 2 1 1 |
10 |
Code Examples
#1 Code Example with C Programming
Code -
C Programming
#include <stdio.h>
int main(int argc, char **argv)
{
unsigned n, m, ans = 0;
scanf("%u", &n);
while (n--)
{
scanf("%u", &m);
if (m != 1)
++ans;
}
printf("%u\n", ans);
return 0;
}
Copy The Code &
Try With Live Editor
Input
Output
#2 Code Example with C++ Programming
Code -
C++ Programming
#include <iostream&tg;
#include <vector>
using namespace std;
int main()
{
int n, c=0;
cin >> n;
vector<int>v(n);
for (int i = 0; i < n; ++i)
{
cin >> v[i];
if (v[i]!=1)
c++;
}
cout << c << endl;
return 0;
}
Copy The Code &
Try With Live Editor
Input
Output
#3 Code Example with Java Programming
Code -
Java Programming
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner leitor = new Scanner(System.in);
int N = leitor.nextInt();
int vitorias = 0;
for (int i = 0; i < N; i++) {
if (leitor.nextInt() != 1) vitorias++;
}
System.out.println(vitorias);
}
}
Copy The Code &
Try With Live Editor
Input
Output
#4 Code Example with Javascript Programming
Code -
Javascript Programming
const { readFileSync } = require("node:fs")
const [numLines, ...input] = readFileSync("/dev/stdin", "utf8")
.split("\n", 1 + 1e4)
.map((value) => Number.parseInt(value, 10))
console.log(
input
.splice(0, numLines)
.filter((gate) => gate !== 1)
.length
)
Copy The Code &
Try With Live Editor