Algorithm
Problem Name: 2 AD-HOC - beecrowd | 2570
Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/2570
Californication
Por Dâmi Henrique, INATEL Brasil
Timelimit: 1
Red, Hot, Chilli e Peppers são quatro estudantes que sempre se reunem embaixo da ponte após o término das aulas para jogar um jogo chamado Californication. Eles desenham um grid NxM no chão, inicialmente vazio, e o objetivo final é dominar a maior parte possível desse grid.
Os estudantes jogam alternadamente, sempre seguindo a mesma ordem: Red, Hot, Chili e Peppers. Após Peppers, a vez volta para Red e assim continuam jogando até completarem K rodadas. Em cada uma das rodadas, o jogador pode escolher entre duas possíveis jogadas:
L X --> {} Significa dominar a linha X do grid, escrevendo a inicial de seu nome em todos os elementos contidos nessa linha.
C Y -->{} Significa dominar a coluna Y do grid, escrevendo a inicial de seu nome em todos os elementos contidos nessa coluna.
Entrada
Após isso, seguem K linhas, cada uma delas contendo uma jogada do tipo L X (1 ≤ X ≤ N) ou C Y (1 ≤ Y ≤ M), ambas descritas acima.
Saída
Exiba o quão dominante cada jogador foi ao final da partida no seguinte formato:
Ra Hb Cc Pd, onde a, b, c e d são inteiros, representando a pontuação final de Red, Hot, Chili e Peppers, respectivamente.
Exemplo de Entrada | Exemplo de Saída |
3 3 5 |
R4 H0 C2 P2 |
Code Examples
#1 Code Example with C++ Programming
Code -
C++ Programming
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 10;
int cor_coluna[MAXN], cor_linha[MAXN], ultima_linha[MAXN], ultima_coluna[MAXN],
atual, n, m, q, qtd[4];
int main() {
scanf("%d %d %d", &n, &m, &q);
for (int i = 1; i < = n; i++) {
cor_linha[i] = -1;
ultima_linha[i] = -1;
}
for (int i = 1; i < = m; i++) {
cor_coluna[i] = -1;
ultima_coluna[i] = -1;
}
for (int i = 1; i < = q; i++) {
char op;
int pos;
scanf(" %c %d", &op, &pos);
if (op == 'L') {
ultima_linha[pos] = i;
cor_linha[pos] = atual;
} else {
ultima_coluna[pos] = i;
cor_coluna[pos] = atual;
}
atual = (atual + 1) % 4;
}
for (int i = 1; i < = n; i++) {
int thelast = ultima_linha[i];
int tot = m;
int vaipara = cor_linha[i];
for (int j = 1; j < = m; j++) {
if (ultima_coluna[j] > thelast && cor_coluna[j] != vaipara) {
tot--;
if (cor_coluna[j] != -1) {
qtd[cor_coluna[j]]++;
}
}
}
if (vaipara != -1) qtd[vaipara] += tot;
}
printf("R%d H%d C%d P%d\n", qtd[0], qtd[1], qtd[2], qtd[3]);
return 0;
}
Copy The Code &
Try With Live Editor
Input
L 2
L 3
C 1
L 3
C 3
Output