14.01.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!