Resolvi aqui o problema Libertadores! Outro problema da categoria Ad-hoc. A solução é bem simples de entender. Conta pra mim nos comentários se a sua solução ficou muito diferente!
Plataforma: URI (BEECROWD)
Problema: 1536
Enunciado:
A Copa Libertadores da América é a principal competição de futebol entre clubes profissionais da América do Sul, organizada pela Confederação Sul-Americana de Futebol (CONMEBOL). Ela é conhecida por ter um regulamento muito complicado, principalmente nas fases das oitavas, quartas e semi-final.
Nessas fases são jogadas partidas de ida e volta no sistema mata-mata. Ganha quem fizer a maior pontuação no acumulado das duas partidas, sendo 3 pontos para vitória e 1 ponto em caso de empate, ambos por partida. Em caso de igualdade na pontuação, são critérios de desempate:
1) saldo de gols (número de gols a favor menos o número de gols contra).
2) mais gols marcados na casa do adversário.
3) disputa por pênaltis.
Todos os critérios devem ser aplicados considerando o acumulado das duas partidas.
Será que você consegue elaborar um algoritmo que, dados os resultados das partidas de ida e de volta, ele identifica o time vencedor?
Linguagens: C e C++
Solução:
Os dois códigos abaixo seguem a mesma lógica. Após ler os valores de cada resultado, basta calcular o total de cada time. Salvei isso nas variáveis totalTime1 e totalTime2. Basicamente precisa-se testar se o saldo de um time é maior que o outro (totalTime1 > totalTime2, por exemplo). Porém, caso os saldos sejam iguais, é necessário comparar tambem v1 (visitante 1) e m2 (mandante 2). Se m2 for maior que v1, o time 1 ganha, se for menor, o time 2 ganha. Caso contrário a disputa vai para pênaltis.
Código em C:
#include <stdio.h> int main() { char lixo; int n, m1, m2, v1, v2, totalTime1, totalTime2; scanf("%d", &n); while (n--) { scanf("%d %c %d", &m1, &lixo, &v1); scanf("%d %c %d", &v2, &lixo, &m2); totalTime1 = m1 + m2; totalTime2 = v1 + v2; if (totalTime1 > totalTime2 || (totalTime1 == totalTime2 && m2 > v1)) printf("Time 1\n"); else if (totalTime1 < totalTime2 || (totalTime1 == totalTime2 && v1 > m2)) printf("Time 2\n"); else printf("Penaltis\n"); } return 0; }
#include <iostream> using namespace std; int main() { char lixo; int n, m1, m2, v1, v2, totalTime1, totalTime2; cin >> n; while (n--) { cin >> m1 >> lixo >> v1; cin >> v2 >> lixo >> m2; totalTime1 = m1 + m2; totalTime2 = v1 + v2; if (totalTime1 > totalTime2 || (totalTime1 == totalTime2 && m2 > v1)) cout << "Time 1" << endl; else if (totalTime1 < totalTime2 || (totalTime1 == totalTime2 && v1 > m2)) cout << "Time 2" << endl; else cout << "Penaltis" << endl; } return 0; }
Nenhum comentário:
Postar um comentário