Archivos diarios: julio 17, 2013

2422 – Betty and the Modular Exponentiation – Concurso progresivo COJ 27 JUN 2013

El pasado 27 de junio del 2013 en la pagina de cuba http://coj.uci.cu/ se llevo a cabo un concurso progresivo, en este link pueden ver los problemas http://coj.uci.cu/contest/cproblems.xhtml?cid=1301 , fueron 30 problemas a resolverse en 10 días, aquí voy a colocar algunos que se me hicieron interesantes de explicar, hoy explicare el siguiente

2422 – Betty and the Modular Exponentiation

Este problema es relativamente sencillo si se tiene los conocimiento de divide y vencerás y además saber como exponenciar un numero a la n de una forma logarítmica, ya que eso pedían el problema, dado a y b imprimir a^b\enspace mod \enspace 1000000000 ya que con eso garantizamos que tenga 9 dígitos, bueno nosotros podemos ver si b es par podemos expresarlo de la siguiente forma a^{b/2} * a^{b/2} si fuera impar lo podemos expresar de la forma a^{b/2} * a^{b/2} * a y sacando siempre el modulo 10^9 para obtener el resultado deseado, si nosotros elaboramos una función recursiva que procese a^{b/2} no necesitaríamos volver a calcularlo ya que ese mismo valor lo podes multiplicar por si mismo para obtener a^b en dado caso que sea impar b hay que volver a multiplicar por a, para que la función regrese siempre a^b de una forma correcta, este procedimiento lo pueden ver en el siguiente código en la función pot.

/* Autor: Rodrigo Burgos Dominguez*/
# include <stdio.h>
# include <string.h>

# define MOD ((long long)1000000000)


long long pot( long long a, long long b){
	long long r;
	if( b == 0 ) return 1;
	if( b == 1 ) return a % MOD;
	r = pot( a , b / 2);
	r = (r * r ) % MOD;
	if(b % 2 == 1) r = (r * a) % MOD;
	return r;
}


main(){
   int ncases, cases, a, b;
   for( scanf("%d", &ncases), cases = 1; cases <= ncases ; cases++){
      scanf("%d %d", &a, &b);
      printf("%lld\n", pot(((long long)a)%MOD, (long long)b));
   }
   return 0;	
}

Próximos concursos

Buenas noches, ya tiene tiempo que no escribo pero aqui les dejo las ligas donde pueden ver los proximos concursos donde pueden participar de manera online:

En codeforces: (proximos concursos) que es una pagina rusa donde uno puede competir por dos horas y por lo regular son 5 problemas a resolver. Hay un concurso el proximo sábado entonces esten atentos.

Tambien puede prepararse en Topcoder en este link (calendar) pueden ver los proximos concursos de este mes y hasta el mes de diciembre por lo mientras.

En la pagina de juez online de Cuba hay varios concursos por venir, pero por el momento son privados, habría que preguntar al administrados cuales son los requisitos para participar.

PD: Apenas paso la final mundial y aqui están los resultados ranklist donde dos equipos mexicanos participaron, y el nuevo campeon del mundo es de Rusia : St. Petersburg National Research University of IT, Mechanics and Optics.