Solução por Pedro Racchetti
Conteúdos usados:
Primeiro, chamaremos o total de cartas na mesa de e o menor número de cartas em uma pilha de . Além disso, perceba que é par, e portanto, o jogador que sempre conseguir entregar movimentos com par ganha.
Podemos dividir o problema em 2 casos: onde é par, e onde é ímpar.
Se for ímpar, podemos ver que cada movimento irá inverter a paridade de , já que ao se-remover carta, a paridade sempre vai inverter, e ao se-remover um número ímpar de cartas, a paridade de também irá inverter. Portanto, pela regra de entregas já mencionadas com ímpar: se é ímpar, Lowie ganha, caso contrário Imitater ganha.
Se for par, teremos que dividir o problema em mais 4 casos:
Se e forem par, Imitater, ou o jogador que receber esse estado, ganha. Como é par, o número de pilhas com número ímpar de cartas é par, chame esse número de . Os movimentos que Lowie pode fazer são:
- Tirar uma carta de uma das pilhas com número de cartas ímpares, Imitater pode tirar uma carta de uma das pilhas restantes, voltando ao estado de antes, agora com sendo exatamente 2 pilhas menor.
- Tirar uma carta de qualquer outra pilha. Nesse caso, como a pilha tirada tinha um número par de cartas Imitater pode imitar o movimento, voltando para o caso inicial, com que e continuem par.
- Se Lowie tirar uma carta de todas as pilhas, Imitater pode imitar o movimento, voltando ao estado de antes, com par.
Logo, independente do que fizer, Imitater consegue entregar mantendo sua paridade, e como é par, Imitater, ou seja quem receber esse caso, perde.
Se for par e for ímpar: Lowie pode tirar uma carta de todas as pilhas. Como é par, continua par, mas vira par, ou seja Lowie estaria entregando o caso acima, ganhando o jogo.
Se é ímpar mas é par, Lowie pode tirar uma carta de qualquer pilha que não contenha cartas, transformando em par, entregando o primeiro desses casos, ganhando o jogo.
Se e são ímpares, Lowie pode tirar uma carta de qualquer pilha com , fazendo com que e virem pares, entregando o primeiro caso, e ganhando o jogo.
Se juntarmos ambos, podemos ver que se é ímpar, Lowie sempre ganha. Se é par, temos que:
- Se for ímpar, Imitater ganha.
- Se for par e for par, Imitater ganha.
- Em qualquer outro caso, Lowie ganha.
Segue o código, comentado para melhor compreensão da solução:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> | |
using namespace std; | |
int n, minimo, total; //váriaveis usadas | |
int main(){ | |
minimo = 1500; // inicializamos minimo com um valor maior que qualquer pilha. | |
scanf("%d", &n); //lêmos o número de pilha | |
for(int i = 0; i < n; i++){ | |
int x; | |
scanf("%d", &x); | |
total += x; | |
minimo = min(x, minimo); | |
//lemos os valores das pilhas. | |
} | |
if(total%2 == 1) printf("lowie\n"); // se total for ímpar, lowie ganha | |
else if(n%2 == 1) printf("imitater\n"); // se total nao for ímpar, é par. Se total é par, e n é impar, imitater ganha | |
else if(n%2 == 0 && minimo%2 == 0) printf("imitater\n"); // se total for par, n for par e minimo for par, imitater ganha | |
else printf("lowie\n"); // em qualquer outro caso lowie ganha. | |
} |