Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
WZP09_2A - 8302 |
Podczas ostatnich Mistrzostw Warszawskiej Wyższej Szkoły Informatyki w Programowaniu zawodnicy zmagali się z zadaniem dotyczącym problemu roku 2038. Przypomnijmy, że w systemach Unix i ich pochodnych data i godzina reprezentowane są w postaci liczby sekund jakie upłynęły od godziny 0:00 dnia 1 stycznia 1970 roku. Niestety liczby sekund jakie upłynęły od wyżej wymienionej daty zapisywane są w 32 bitowych zmiennych ze znakiem, a zatem maksymalna wartość jaką można przechować to 2147483647 sekund co odpowiada godzinie 3:14:07 dnia 19 stycznia 2038 roku. Rozwiązanie tego problemu jest oczywiście banalnie proste, wystarczy użyć zmiennych 64 bitowych.
W ramach ostatnich zawodów należało napisać program, który zamieniał ilość sekund w formacie uniksowym na datę, tym razem zadanie jest odwrotne. Dla daty podanej w formacie R-M-D g:m:s wyznacz odpowiadającą jej ilość sekund jakie upłynęły od godziny 0:00 dnia 1 stycznia 1970 roku. Oznaczenia R, M, D, g, m, s określają odpowiednio rok, miesiąc, dzień miesiąca, godzinę minutę oraz sekundę. W obliczeniach należy uwzględnić lata przestępne.
Przypominamy, że rok jest przestępny jeżeli spełnia jeden z dwóch warunków:
- Jest podzielny przez 4 i nie jest podzielny przez 100
- Jest podzielny przez 400
Wejście
W pierwszej linii wejścia znajduje się dokładnie jedna liczba naturalna t (1 <= t <= 1000) określająca ilość zestawów danych. W kolejnych t liniach znajdują się zestawy danych.
Każdy zestaw danych składa się z jednej daty w formacie "R-M-D g:m:s", dla której należy obliczyć reprezentację w formacie uniksowym. W polach M, D, g, m oraz s mogą występować nieznaczące zera. Data może przyjmować wartości od 1970-01-01 00:00:00 do 2200-01-01 00:00:00 włącznie z tymi datami.
Wyjście
Dla każdego zestawu danych należy w osobnej linii wypisać reprezentację wczytanej daty w formacie uniksowym czyli ilość sekund jakie upłynęły od godziny 0:00 dnia 1 stycznia 1970 roku.
Przykład
Dla danych:
3 1970-01-01 00:00:00 2038-01-19 03:14:08 2009-05-16 15:10:00
Twój program powinien wypisać:
0 2147483648 1242486600
Dodane przez: | Maciej Boniecki |
Data dodania: | 2009-11-01 |
Limit czasu wykonania programu: | 1s |
Limit długości kodu źródłowego | 50000B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | All except: NODEJS OBJC PERL6 SCM qobi SQLITE VB.NET |
Pochodzenie: | Wiosenne Zawody Programistyczne 2009 |