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;
}

domingo, 24 de febrero de 2013

Codeforces Round # 169 A div2

Problema.- 

El problema era sencillo trataba sobre un equipo de programación que luego de haber participado en un concurso su entrenador les dio tiempo libre para ir almorzar el tiempo sera representado por k.
El equipo tenia una lista de los restaurantes con números fi y ti donde fi representaba la felicidad del grupo y ti el tiempo que tardarían en ese restaurante.
La tarea era hallar el numero máximo de felicidad con la condición que si ti>k la felicidad se mediría con 
fi-(ti-k) y si fuera menor entonces se debería tomar tan solo fi.
acceda al problema.

Solución.-

Al ver este problema no pensé mas que simulación así que a codificar tan solo era hallar el máximo de pares con la condición que nos daban pero había un caso en el cual la felicidad podía ser negativo entonces la variable max no debería empezar desde cero.

Codigo.-

int main()
{
int n,k;
   int max1=-(2<<29);
   cin>>n>>k;
   REP(i,n)
   {
       int t,f;
       cin>>f>>t;
       if(t>k)
        max1=max(max1,f-(t-k));
       else
        max1=max(max1,f);
   }
   cout<<max1<<endl;
   return 0;
}

sábado, 23 de febrero de 2013

Bievenidos


Bienvenido a mi blog Bit&Bit, que lo hice luego de tropezar tanto en mis búsquedas sobre temas de algoritmia y así poder ayudar a los demás y no tropiecen tanto como yo lo hice, intentare subir información constantemente con temas nuevos detallados comúnmente relacionado con la ACM-ICPC y espero les guste.
También subiré tutoriales sobre los diferentes Concursos en los cuales participo como Codeforces y Topcoder similar a los que vi en el blog de vexorian.