Algorithm
Problem Name: 2 AD-HOC - beecrowd | 2304
Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/2304
Banco Imobiliário
Por OBI - Olimpíada Brasileira de Informática 2006 Brazil
Timelimit: 1
Monopólio (conhecido no Brasil como Banco Imobiliário) é um dos jogos mais famosos do mundo, com 750 milhões de cópias vendidas. Durante o jogo, os jogadores podem comprar propriedades que estejam disponíveis, vendê-las para que elas voltem a ficar disponíveis, e cobrar aluguel pelo uso de uma determinada propriedade por outro jogador. O objetivo do jogo é acumular a maior quantidade de dinheiro possível.
O jogo é composto por um tabuleiro e um conjunto de cédulas de dinheiro. Três amigos, Dália, Elói e Félix, querem jogar uma partida de Monopólio, mas o irmãozinho menor de Dália escondeu as cédulas de dinheiro. Os três amigos decidiram jogar a partida assim mesmo, anotando em um papel todas as operações que ocorreram durante o jogo (compras, vendas e pagamentos de aluguéis). Assim que eles pararam de jogar, perceberam que levaria muito tempo para descobrir quanto dinheiro cada um acumulou. Eles então pediram sua ajuda para determinar esses valores.
Sua tarefa é escrever um programa que, a partir dos registros de jogadas realizados pelos três jogadores, determine a quantidade de dinheiro acumulada por cada um dos jogadores.
Entrada
A entrada contém um único conjunto de testes, que deve ser lido do dispositivo de entrada padrão (normalmente o teclado). A primeira linha da entrada contém dois inteiros, I e N que indicam respectivamente as quantias de dinheiro que Dália, Elói e Félix possuem no início do jogo (1 ≤ I ≤ 1000000) e o número de operações realizadas durante o jogo (1 ≤ N ≤ 10000). Note que os três jogadores iniciam a partida com a mesma quantidade de dinheiro. Os jogadores são representados na entrada sempre pela letra inicial de seu nome (‘D’, ‘E’ ou ‘F’). As N linhas contém as operações ocorridas durante o jogo. Cada linha pode ter um dos formatos abaixo:
- Compra — a letra C, seguida da letra inicial de um jogador J e de um inteiro X que representa o valor gasto por J na compra (0 < X ≤ 1000000). Exemplo: ‘C D 1000’.
- Venda — a letra V, seguida da letra inicial de um jogador J e de um inteiro X que representa o valor recebido por J na venda (0 < X ≤ 1000000). Exemplo: ‘V E 200’.
- Aluguel — a letra A, seguida da letra inicial de um jogador J que recebe o aluguel, da letra inicial do jogador K que paga o aluguel e de um inteiro X que representa o valor do aluguel (J != K e 0 ≤ X ≤ 1000000). Exemplo: ‘A F D 500’.
Os valores intermediários e totais acumulados por cada jogador estão entre 0 e 1000000.
Saída
Seu programa deve imprimir, na saída padrão, uma única linha composta de três inteiros que correspondem à quantidade de dinheiro acumulada por Dália, Elói e Félix, nesta ordem.
Exemplos de Entrada | Exemplos de Saída |
1000 1 C D 500 |
500 1000 1000 |
Code Examples
#1 Code Example with C++ Programming
Code -
C++ Programming
#include <iostream>
#define endl '\n'
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int dalila, eloi, felix, eventos;
cin >> dalila >> eventos;
eloi = felix = dalila;
while (eventos--) {
char op;
int valor;
cin >> op;
if (op == 'C') {
char jogador;
cin >> jogador >> valor;
if (jogador == 'D') dalila -= valor;
if (jogador == 'E') eloi -= valor;
if (jogador == 'F') felix -= valor;
}
if (op == 'V') {
char jogador;
cin >> jogador >> valor;
if (jogador == 'D') dalila += valor;
if (jogador == 'E') eloi += valor;
if (jogador == 'F') felix += valor;
}
if (op == 'A') {
char jogador1, jogador2;
cin >> jogador1 >> jogador2 >> valor;
if (jogador1 == 'D') dalila += valor;
if (jogador1 == 'E') eloi += valor;
if (jogador1 == 'F') felix += valor;
if (jogador2 == 'D') dalila -= valor;
if (jogador2 == 'E') eloi -= valor;
if (jogador2 == 'F') felix -= valor;
}
}
cout << dalila << " " << eloi << " " << felix << endl;
return 0;
}
Copy The Code &
Try With Live Editor
Input
C D 500
Output