Programacion, ACM ICPC, UVa Online Judge

El link del problema es el siguiente:
1203 – Argus

El problema es Ad Hoc.
Lo que nos dan es un conjunto de tareas, que cada lapso de tiempo se repiten nuevamente.
Conociendo el identificador de la tarea (que es único), hay que decir en que orden se ejecutarían las siguientes «k» tareas.
Si hay empate en el momento en el que se ejecutan las tareas, entonces se desempata por el identificador mas bajo.

Para esto, lo mas sencillo es utilizar una cola de prioridad y utilizando parejas(pair<int,int>).
Podemos modificar la cola de prioridad o meter los valores pero multiplicados por menos uno.
Al sacar el elemento de la cola, imprimimos el identificador y lo introducimos nuevamente a la cola aumentando el tiempo.
Repetir el proceso «k» veces para obtener la solución.

Codigo en C++

El link del problema es el siguiente:
893 – Y3K Problem

El problema es de tipo Ad hoc y se puede resolver fácilmente con Java utilizando la clase Calendar.
El problema nos da una fecha y una cantidad de días después de la fecha dada, y hay que calcular la fecha resultante.

Como dije se puede hacer muy fácil en Java utilizando Calendar.
Al leer, primero es el numero de días que avanzaremos, y después la fecha.
Con el método «set» de Calendar colocamos la fecha actual y utilizando el método «add» con el valor DAY_OF_MONTH, agregamos la cantidad de días que el caso especifico.

La parte importante seria esta:
Calendar c;
c.set(year,month-1,day);
c.add(DAY_OF_MONTH,plus);

E imprimir en el formato indicado.

Codigo en Java

El link del problema es el siguiente:
11371 – Number Theory for Newbies

El problema es de tipo Ad hoc.
Lo que nos dan es un numero n, y lo que nos piden es encontrar una forma de re ordenar el numero de tal manera que su diferencia sea máxima y la diferencia sea múltiplo de 9.
El numero máximo que nos dan tiene a lo mas 10 dígitos (2000000000), por lo tanto, podemos sacar todas las permutaciónes utilizando next_permutation.
Al ir obteniendo las permutaciónes podemos ir obteniendo modulo 9 de cada numero, e ir guardando el máximo y el mínimo de entre los números que tengan el mismo modulo.
La explicación es que si dos números tienen el mismo modulo los podemos representar de la forma
A = 9*q1 + r
B = 9*q2 + r

Donde q es un entero.
y cuando hagamos la diferencia entre ellos tendremos
A-B = 9*q1 +r – 9*q2 -r = 9*q1 – 9*q2 = 9*(q1 – q2)

Por lo tanto, si tienen el mismo residuo, la diferencia es un múltiplo de 9.
Uva vez realizas todas las permutaciónes, elegimos entre los que almacenamos el que nos maximice la diferencia.
Solo hay que tener en cuenta algo al ir generando las permutaciónes, y es que hay que cuidar que no tenga ceros a la izquierda, ya que si los tiene, no se tiene que considerar.

Codigo en C++

El link del problema es el siguiente:
11988 – Broken Keyboard (a.k.a. Beiju Text)

El problema es Ad Hoc.
Lo que nos dicen es que cada vez que encontremos un corchete que abre, tenemos que posicionarnos al principio de la cadena y cuando encontremos un corchete que cierra, hay que posicionarse al final de la cadena.
Este problema se pueden utilizar listas, y simplemente al encontrar un corchete que abre posicionar el iterador al principio de la lista y cuando encontramos un corchete que cierra nos posicionamos al final de la lista, y para cualquier otro caracter que no sea corchete, insertamos en la lista.

Código en C++

El link del problema es el siguiente:
12342 – Tax Calculator

El problema nos pide calcular el impuesto que hay que pagar dependiendo de cuanto dinero tengamos.
Solo hay que seguir la tabla que se muestra en el problema y utilizar doubles para los datos, y al final sacar ceil del resultado.

Codigo en C++

El link del problema es el siguiente:
11965 – Extra Spaces

Lo que nos dan de entrada es un texto que en algunas ocasiones contiene espacios de mas, entonces simplemente hay que quitarlos.
Podemos leer la cadena, y ir imprimiendo letra por letra, cuando y cuando encontremos un espacio, imprimirlo y avanzar las posiciones siguientes mientras encontremos espacio.

Código en C++

El link del problema es el siguiente:
11934 – Magic Formula

El problema nos va a dar la descripción de un polinomio de grado 2 de la forma
f(x) = ax² + bx + c
Un numero «d» y un numero «L» y hay que decir, cuantos valores de la función f(x) desde (0<=x<=L) son divisibles por «d».
Si observamos el tamaño de la entrada observamos que los números no son muy grandes, por lo tanto podemos simular.
Realizamos la función f(x) con parámetro a,b,c y realizamos un for desde 0 hasta L y revisamos si el modulo con respecto a d es igual a cero.

Código en C++

El link del problema es el siguiente:
11955 – Binomial Theorem

Básicamente lo que nos piden en este problema es imprimir un binomio elevado a una potencia k.
Para esto, se puede utilizar lo que es un triangulo de pascal ara obtener los coeficientes del polinomio.
Como el k puede ser hasta 50, el tipo de dato que podemos usar es unsigned long long int, y no es necesario utilizar BigInteger.
Una vez calculado, simplemente es cosa de imprimir el polinomio con el nombre de los coeficientes que corresponden.
El binomio siempre tiene dos términos y siempre el signo es positivo.

Código en C++

El link del problema es el siguiente:
10112 – Myacm Triangles

Lo que nos piden es encontrar el triangulo que tenga el Área mas grande y que ademas no contenga mas puntos en su interior.
Como a lo mas tenemos 15 puntos, podemos generar todos los posibles triángulos, y luego revisar si existe algún punto en el interior del triangulo generado.
De los triángulos que no tiene ningún punto obtenemos su Área y de todos esos obtenemos el mayor y las letras asociadas.
Cabe aclarar que no siempre el primer punto tiene asociada la letra A, el segundo la B, etc. Pueden ir en desorden.

Código en C++

El link del problema es el siguiente:
1230 – MODEX

Lo que nos piden es elevar un numero «x» a una potencia «y» y obtener el modulo «n» de ese conjunto de operaciones.
Una solución es implementar una exponenciación rápida modular, que consiste en ir sacando los módulos al mismo tiempo que se eleva a la potencia para no desbordar el tipo de dato.
Otra solución mas corta es utilizar Java y la clase BigInteger ya tiene implementado expmod que hace exactamente lo que el problema solicita.

Código en Java