miércoles, 27 de febrero de 2013

Codeforces Round # 169 B div2

Problema.-
2 jugadores se deciden a jugar con una cadena el juego consiste

  •  gana el 1ero que forma una palabra palindroma 
  •  Si no es posible formar una palabra palindroma debe eliminar un carácter de la palabra
Los 2 jugadores perfectamente Diga quien ganara el Juego
Link del Problema
Solución.-
A mi parecer este ejercicio estaba mas fácil que el ejercicio A pues al ver es teoría de juegos, como juega siempre perfectamente, es común encontrar un formula.
tenemos 2 casos uno es si podemos formar una palabra palindroma y el otro eliminar un carácter
1er Caso¿Cuando una palabra es palindroma?
Nos podemos a pensar las palabras palindromas son las que dando la vuelta forman la misma palabra  EJ
ana, aabbaa, etc.
entonces vemos que pasa si ordenamos las cadenas aan, aaaabb tienen una propiedad que todos los caracteres deben ser un numero par y puede haber tan solo un caracter con cantidad impar.
Por Ejemplo para:
                                    ANA               A=2    N=1 Palindroma
                                    AABBAA        A=4    B=2  Palindroma
                                    AAABAA        A=5   B=1  No palindroma pues hay 2 impares
2do Caso
Ahora observemos que los 2 juegan perfectamente entonces cuando eliminen un carácter no dejara que el otro forme un palindrome entonces dependerá del ultimo carácter quien gana el juego entonces como el primer jugador sera el primero en eliminar entonces ganara solo cuando sea impar la longitud de la cadena y por complemento ganara en segundo Jugador.
Codigo.-

bool palin(string cad)
{
    vi v(27);
    int p=cad.size();
    REP(i,p)
    {
        v[cad[i]-'a']++;
    }
    int cont=0;
    REP(i,27)
    {
        if(v[i]%2!=0)
            cont++;
    }
    if(cont>1)
        return false;
    return true;
}
int main()
{
    string cad;
    cin>>cad;
    if(palin(cad))
        cout<<"First"<<endl;
    else
    {
        int l=cad.size();
        if(l%2==0)
             cout<<"Second"<<endl;
        else
             cout<<"First"<<endl;

    }
    return 0;
}

No hay comentarios:

Publicar un comentario