Algorithm


Problem Name: 2 AD-HOC - beecrowd | 2287

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

Proteja sua Senha

 

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

Timelimit: 1

Por questões de segurança, muitos bancos hoje em dia estão alterando a forma como seus clientes digitam as senhas nos caixas eletrônicos, pois alguém pode postar-se atrás do cliente e ver as teclas à medida em que ele as digita.

Uma alternativa bastante utilizada tem sido associar os dez dígitos a cinco letras, de forma que cada letra esteja associada a dois dígitos, conforme o exemplo abaixo:

As associações entre números e letras são mostradas como botões numa tela sensível ao toque, permitindo que o cliente selecione os botões correspondentes à senha. Considerando a disposição dos botões da figura acima, a senha 384729 seria digitada como BCEAEB (note que a mesma seqüência de letras seria digitada para outras senhas, como por exemplo 982123).

Cada vez que o cliente usa o caixa eletrônico, as letras utilizadas são as mesmas (de ‘A’ a ‘E’), com os botões nas mesmas posições, mas os dígitos são trocados de lugar. Assim, caso um intruso veja (mesmo que mais de uma vez) a seqüência de letras digitada, não é possível notar facilmente qual a senha do cliente do banco.

Dada uma seqüência de associações entre letras e números, e as letras digitadas pelo cliente do banco para cada uma dessas associações, você deve escrever um programa para determinar qual é a senha do cliente.

 

Entrada

 

A entrada é composta de vários conjuntos de testes. A primeira linha de um conjunto de testes contém um inteiro N, que indica o número de associações entre letras e números e as senhas digitadas (2 ≤ N ≤ 10). As N linhas seguintes contêm as entradas da seguinte forma: 10 dígitos, em ordem de associação, para as letras de ‘A’ a ‘E’ (2 dígitos para a letra A, 2 para a B e assim sucessivamente) e 6 letras que representam a senha codificada conforme os dígitos anteriores. As N associações fornecidas em um conjunto de testes serão sempre suficientes para definir univocamente a senha do cliente. O final da entrada é indicado por N = 0.

 

Saída

 

Para cada conjunto de teste da entrada, seu programa deve produzir três linhas na saída. A primeira linha deve conter um identificador do conjunto de teste, no formato “Teste n”, onde n é numerado seqüencialmente a partir de 1. A segunda linha deve conter a senha do cliente, com um espaço após cada dígito. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.

 

 

 

Exemplo de Entrada Exemplo de Saída

2

1 7 3 9 0 8 5 6 2 4 B C E A E B

9 0 7 5 8 4 6 2 3 1 E C C B D A

3

0 1 2 3 4 5 6 7 8 9 B C D D E E

1 3 5 4 6 8 7 9 0 2 E B C D C D

3 2 0 4 5 9 7 6 8 1 A C D D E C

0

Teste 1

3 8 4 7 2 9


Teste 2

2 5 6 7 8 9

 

Code Examples

#1 Code Example with C++ Programming

Code - C++ Programming


#include <cstdio>
#include <cstring>
int possivel[6][11], digito1[20], digito2[20], n, teste;
int main() {
    while (scanf("%d", &n) && n) {
        memset(possivel, 1, sizeof(possivel));
        for (int vez = 1; vez  < = n; vez++) {
            for (char c = 'A'; c  < = 'E'; c++) {
                scanf("%d %d", &digito1[c - 'A'], &digito2[c - 'A']);
            }
            for (int digitodavez = 0; digitodavez  <  6; digitodavez++) {
                char c;
                scanf(" %c", &c);
                for (int novodigito = 0; novodigito  < = 9; novodigito++) {
                    if (novodigito == digito1[c - 'A'] ||
                        novodigito == digito2[c - 'A'])
                        continue;
                    possivel[digitodavez][novodigito] = 0;
                }
            }
        }
        printf("Teste %d\n", ++teste);
        for (int digitodavez = 0; digitodavez  <  6; digitodavez++) {
            for (int novodigito = 0; novodigito  < = 9; novodigito++) {
                if (possivel[digitodavez][novodigito]) {
                    printf("%d ", novodigito);
                }
            }
        }
        printf("\n\n");
    }
    return 0;
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
2
1 7 3 9 0 8 5 6 2 4 B C E A E B
9 0 7 5 8 4 6 2 3 1 E C C B D A
3
0 1 2 3 4 5 6 7 8 9 B C D D E E
1 3 5 4 6 8 7 9 0 2 E B C D C D
3 2 0 4 5 9 7 6 8 1 A C D D E C
0

Output

x
+
cmd
Teste 1
3 8 4 7 2 9

Teste 2
2 5 6 7 8 9
Advertisements

Demonstration


Previous
#2286 Beecrowd Online Judge Solution 2286 Par ou Ímpar Solution in C, C++, Java, Js and Python
Next
#2293 Beecrowd Online Judge Solution 2293 Campo de Minhocas Solution in C, C++, Java, Js and Python