-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy path1439.cpp
98 lines (97 loc) · 2.75 KB
/
1439.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Ivan Carvalho
// Solution to https://www.beecrowd.com.br/judge/problems/view/1439
#include <cstdio>
#include <cstring>
int contador[10];
int mao[10][60];
int naipe[1000];
int pilha[300];
int tam, descartada;
int compra(int p) {
mao[p][pilha[tam++]]++;
contador[p]++;
return pilha[tam - 1];
}
void descarta(int p, int cart) {
mao[p][cart]--;
contador[p]--;
descartada = cart;
}
int main() {
naipe['C'] = 0;
naipe['D'] = 1;
naipe['H'] = 2;
naipe['S'] = 3;
int P, M, N;
while (scanf("%d %d %d", &P, &M, &N) && P) {
memset(mao, 0, sizeof(mao));
for (int p = 0; p < P; p++) {
contador[p] = M;
for (int m = 0; m < M; m++) {
int a;
char b;
scanf(" %d %c", &a, &b);
mao[p][4 * a + naipe[b]]++;
}
}
for (int i = 0; i < N - P * M; i++) {
int a;
char b;
scanf(" %d %c", &a, &b);
pilha[i] = 4 * a + naipe[b];
}
int sentido = 1;
int jogador = 0;
descartada = pilha[0];
tam = 1;
if (descartada / 4 == 12)
sentido *= -1;
else if (descartada / 4 == 7) {
compra(0);
compra(0);
jogador = 1;
} else if (descartada / 4 == 1) {
compra(0);
jogador = 1;
} else if (descartada / 4 == 11)
jogador = 1;
while (1) {
int achou = 0;
for (int i = 55; i > 3; i--) {
if (mao[jogador][i] &&
(i / 4 == descartada / 4 || i % 4 == descartada % 4)) {
achou = 1;
descarta(jogador, i);
break;
}
}
if (contador[jogador] == 0) {
printf("%d\n", jogador + 1);
break;
}
if (!achou) {
int cart = compra(jogador);
if (cart / 4 == descartada / 4 || cart % 4 == descartada % 4) {
descarta(jogador, cart);
achou = 1;
}
}
if (achou) {
int proximo = (jogador + sentido + P) % P;
if (descartada / 4 == 12)
sentido *= -1;
else if (descartada / 4 == 7) {
compra(proximo);
compra(proximo);
jogador = proximo;
} else if (descartada / 4 == 1) {
compra(proximo);
jogador = proximo;
} else if (descartada / 4 == 11)
jogador = proximo;
}
jogador = (jogador + sentido + P) % P;
}
}
return 0;
}