Algorithm


Problem Name: 2 AD-HOC - beecrowd | 2298

Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/2298

Mini-Poker

 

Por OBI - Olimpíada Brasileira de Informática 2005 BR Brazil

Timelimit: 1

Mini-Poker é o nome de um jogo de cartas que é uma simplificação de Poker, um dos mais famosos jogos de cartas do mundo. Mini-Poker é jogado com um baralho normal de 52 cartas, com quatro naipes (copas, paus, espadas e ouro), cada naipe compreendendo treze cartas (Ás, 2, 3, 4, 5, 6, 7, 8, 9, 10, Valete, Dama, Rei).

No início do jogo, cada jogador recebe cinco cartas. O conjunto de cinco cartas vale um certo número de pontos, de acordo com as regras descritas abaixo. Diferentemente do jogo de Poker normal, em Mini-Poker o naipe das cartas é desconsiderado. Assim, para simplificar a descrição do jogo, vamos utilizar os números de 1 a 13 para identificar as cartas do baralho, na ordem dada acima. Uma outra diferença é que pode ocorrer empate entre mais de um vencedor; nesse caso os vencedores dividem o prêmio.

As regras para pontuação em Mini-Poker são as seguintes:

  1. Se as cinco cartas estão em seqüência a partir da carta x (ou seja, os valores das cartas são x, x+1, x+2, x+3 e x+4), a pontuação é x+200 pontos. Por exemplo, se as cartas recebidas são 10, 9, 8, 11 e 12, a pontuação é 208 pontos.
  2. Se há quatro cartas iguais x (uma quadra, ou seja, os valores das cartas são x, x, x, x e y), a pontuação é x+180 pontos. Por exemplo, se as cartas recebidas são 1, 1, 1, 10 e 1, a pontuação é 181 pontos.
  3. Se há três cartas iguais x e duas outras cartas iguais y (uma trinca e um par, ou seja, os valores das cartas são x, x, x, y e y), a pontuação é x + 160 pontos. Por exemplo, se as cartas recebidas são 10, 4, 4, 10 e 4, a pontuação é 164 pontos.
  4. Se há três cartas iguais x e duas outras cartas diferentes y e z (uma trinca, ou seja, os valores das cartas são x, x, x, y e z), a pontuação é x + 140 pontos. Por exemplo, se as cartas recebidas são 2, 3, 2, 2 e 13, a pontuação é 142 pontos.
  5. Se há duas cartas iguais x, duas outras cartas iguais y (x != y) e uma outra carta distinta z (dois pares, ou seja, os valores das cartas são x, x, y, y e z), a pontuação é 3 × x + 2 × y + 20 pontos, em que x > y. Por exemplo, se as cartas recebidas são 12, 7, 12, 8 e 7, a pontuação é 70 pontos.
  6. Se há apenas duas cartas iguais x e as outras são todas distintas (um par, ou seja, os valores das cartas são x, x, y, z e t), a pontuação é x pontos. Por exemplo, se as cartas recebidas são 12, 13, 5, 8 e 13, a pontuação é 13 pontos.
  7. Se todas as cartas são distintas, não há pontuação.

Escreva um programa que, fornecidas as cartas dadas a um jogador, calcule pontuação do jogador naquela jogada.

 

Entrada

 

A entrada é composta por vários casos de teste, cada um correspondendo a uma jogada. A primeira linha da entrada contém um inteiro N que indica o número de casos de teste (1 ≤ N ≤ 100). Cada uma das N linhas seguintes contém cinco números inteiros C1,C2,C3,C4 e C5, representando as cinco cartas recebidas por um jogador (1 ≤ C1,C2,C3,C4,C5 ≤ 13).

A entrada deve ser lida do dispositivo de entrada padrão (normalmente o teclado)

 

Saída

 

Para cada caso de teste da entrada, seu programa deve produzir três linhas na saída. A primeira linha deve conter um identificador do caso de teste, no formato “Teste n”, onde n é numerado seqüencialmente a partir de 1. A segunda linha deve conter a pontuação do jogador considerando as cinco cartas recebidas. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.

A saída deve ser escrita no dispositivo de saída padrão (normalmente a tela).

 

 

 

Exemplo de Entrada Exemplo de Saída

2

12 3 10 3 12

1 2 3 5 4

Teste 1

62


Teste 2

201

 

Code Examples

#1 Code Example with C++ Programming

Code - C++ Programming


#include <algorithm>
#include <cstdio>
#include <vector>
#define PB push_back
using namespace std;
int main() {
    int t;
    scanf("%d", &t);
    for (int caso = 1; caso  < = t; caso++) {
        int pontuacao = 0;
        vector<int> cartas;
        for (int i = 0; i  < = 14; i++) cartas.PB(0);
        for (int i = 0; i  <  5; i++) {
            int davez;
            scanf("%d", &davez);
            cartas[davez]++;
        }
        for (int i = 1; i  < = 13; i++)
            if (cartas[i] == 2) pontuacao = max(i, pontuacao);
        for (int i = 1; i  < = 13; i++) {
            if (cartas[i] != 2) continue;
            for (int j = i + 1; j  < = 13; j++) {
                if (cartas[j] != 2) continue;
                for (int k = 1; k  < = 13; k++) {
                    if (cartas[k] != 1) continue;
                    pontuacao = max(pontuacao, 3 * j + 2 * i + 20);
                }
            }
        }
        for (int i = 1; i  < = 13; i++)
            if (cartas[i] == 3) pontuacao = max(pontuacao, 140 + i);
        for (int i = 1; i  < = 13; i++) {
            if (cartas[i] != 3) continue;
            for (int j = 1; j  < = 13; j++) {
                if (cartas[j] != 2) continue;
                pontuacao = max(pontuacao, 160 + i);
            }
        }
        for (int i = 1; i  < = 13; i++)
            if (cartas[i] == 4) pontuacao = max(pontuacao, 180 + i);
        for (int i = 1; i  < = 9; i++) {
            if (cartas[i] == 1 && cartas[i + 1] == 1 && cartas[i + 2] == 1 &&
                cartas[i + 3] == 1 && cartas[i + 4] == 1)
                pontuacao = max(pontuacao, 200 + i);
        }
        printf("Teste %d\n%d\n\n", caso, pontuacao);
    }
    return 0;
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
2
12 3 10 3 12
1 2 3 5 4

Output

x
+
cmd
Teste 1
62

Teste 2
201
Advertisements

Demonstration


Previous
#2297 Beecrowd Online Judge Solution 2297 Bafo Solution in C, C++, Java, Js and Python
Next
#2303 Beecrowd Online Judge Solution 2303 Margaridas Solution in C, C++, Java, Js and Python