Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia
Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia
Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Explicaciones a <strong>los</strong> <strong>problemas</strong> South American Regionals 2008 35<br />
Análisis <strong>de</strong>l Problema G<br />
El problema nos pi<strong>de</strong> <strong>de</strong>terminar en la entrada si dos fechas son consecutivas. En este caso se<br />
acumulan <strong>los</strong> kwatts que se consumieron, que son la diferencia entre ambas entradas.<br />
La dificultad está en controlar <strong>los</strong> años bisiestos que se <strong>de</strong>terminan con <strong>los</strong> datos dados:<br />
1. El año <strong>de</strong>be ser múltiplo <strong>de</strong> 4 y no por 100<br />
2. o divisible por 400<br />
Si y es el año el código siguiente nos dice si el año es bisiesto.<br />
( ((y%4)==0 && (y%100)!=0) || (y%400)==0 )<br />
Para <strong>de</strong>terminar si un día es conse-cutivo con otro hay dos formas:<br />
1. Calcular el día Juliano y restar ambos días si la distancia es uno son consecutivos<br />
2. La segunda opción es la <strong>de</strong> comparar <strong>los</strong> días, meses y años para <strong>de</strong>terminar si son<br />
consecutivos. Por ejemplo si el mes es enero 31 y el siguiente es febrero 1 son consecutivos,<br />
si están en el mismo año,<br />
Utilizando la segunda opción usaríamos el código utilizado en la versión java.<br />
public static boolean consecutive(int d1, int m1, int y1, int d2, int m2,<br />
int y2) {<br />
if(m1 == 1 || m1 == 3 || m1 == 5 || m1 == 7 || m1 == 8 || m1 == 10 ||<br />
m1 == 12) {<br />
if(d1