4 / 10
Aug 2015

wej:
2000.03.01 01:00 20 5
2000.08.01 03:29 40 8
2013.01.01 01:25 100 2

wyj:
2000.02.29 21:00
2000.07.31 22:30
2012.12.29 23:26

ktoś może sprawdzić?
I może podrzucić jeszcze parę testów smile

  • created

    Jul '13
  • last reply

    Jun '16
  • 9

    replies

  • 1.3k

    views

  • 5

    users

  • 1

    like

  • 2

    links

Ja osobiście wszystko przeliczałem, ale jest jedno zgłoszenie oparte na funkcjach biblioteki ctime, proste i przyjemne smile.

2 years later

t = s / v * 60; <== zastosuj tu tylko zmienne typu int, ale aby zachować dokładność, zmień kolejność działań.

Czy nie lepiej wczytywać np tak:

while(scanf("%d.%d.%d %d:%d %d %d", &year, &month, &day, &hour, &minute, &s, &v)!=EOF){

Dziękuję ślicznie, AC. Aczkolwiek nie do końca rozumiem co ma kolejność działań do dokładności i dlaczego na int się udało, a na double nie. Co do wczytywania, na początku używałem (jak zwykle) iostream, ale miałem wtedy przekroczenie limitu czasu, a z wczytywaniem przy pomocy cstdio nie jestem zbytnio obeznany. Podobno gets jest szybkie, ale mniemam, że późniejszy sscanf i tak tą "szybkość" zniwelował.

BTW przepraszam za offtop, ale co się stało ze spojem? Na głównej stronie pojawił się nowy motyw, którego stopka zresztą zasłania mi część strony np. treść zadania albo listę zadań, a forum z linku pl.spoj.com/forum nie działa: "Forum is currently offline for maintainance. We will be back soon.". Poza tym link "manage account" przekierowuje na głównego spoja i muszę ręcznie wklepywać pl.spoj.com/myaccount, żeby zobaczyć listę rozwiązanych zadań.

Po zastanowieniu, faktycznie nie powinno to mieć znaczenia, gdyby nie:

"Czas przemarszu wojska zaokrąglamy do pełnych minut w dół."

PS
Już jutro startuje kolejna edycja algoligi - zapraszam serdecznie!

9 months later

Witam! W dalszym ciągu męczę zadania wymagające niewielu algorytmów za to klepania kodu i denerwowania się na dokładnego sędziego. Idzie mi średnio, ale bądź co bądź jeszcze rok temu nie szło mi wcale.

Postanowiłem zająć się http://pl.spoj.com/problems/AL_08_01/12

Mój kod przeszedł wszystkie testy: moje, Wolframowskie (wpisywałem losowe daty i odejmowałem ileś godzin), z komentarzy pod Algoligą oraz ze starego forum. Według SPOJa WA. Ktoś zauważył, że w zadaniu input jest niezgodny ze specyfikacją (kwiecień ma 31 dni i tak dalej), ale nie chce mi się w to wierzyć. W związku z tym proszę o pomoc w postaci jakiegoś newralgicznego testu bądź odpowiedzi do przykładowych testów, które teraz na szybko wymyślę:

Input:
2000.04.17 12:39 5 10
2000.04.17 12:39 100 5
2015.06.30 19:00 5 10
2099.07.01 00:00 7 49
1900.01.05 03:33 100 5
1945.04.17 08:30 12 37
1900.01.01 00:00 999 1

Mój out:
2000.04.17 12:09
2000.04.16 16:39
2015.06.30 18:30
2099.06.30 23:52
1900.01.04 07:33
1945.04.17 08:11
1899.11.20 09:00

Jeżeli to nie pomoże to chyba będę zmuszony wkleić kod.

Dla twoich danych mam taki sam wynik, ale ....

  1. może drukujesz niedrukowalne znaki - których nie widać na ekranie czy pliku [w normalnym edytorze]?
  2. Druga sprawa, jak testujesz dla:
    2099.07.01 00:00 7 49
    to warto przetestować też dla:
    2100.......................50
    i analogicznie: 1900.01.01 00:00 999 1 - możesz dać spokojnie 1000 1 // wiem, że jest ogr s <1000.
    Powiesz, że takich danych nie ma - przekraczają zakres? Może i tak, ale jeżeli twój program liczy dobrze dla 2099 .... 49 to czemu nie miałby liczyć też dla "rozszeżonego" nieznacznie zakresu? Ano może nie liczyć, gdy rozwiązujący wstawi błędne asserty lub instrukcje sprawdzające [błędne] ale Ty chyba tego nie robisz? To [asserty] sprawa autora.

Mi też, ja raczej to chyba uwzględniam - przynajmniej przy wypisywaniu - a także uwzględniam wpływ przęstępczości, na obliczenia, w danym roku.

PS
Dodałem sprawdzanie poprawności daty w danych wejściowych, wysłałem i jest jak najbardziej ok.

  1. Uczyniłem kod mniej przejrzystym, ale wg mnie wyklucza to na 100% taką możliwość. Wszystkie printfy zostały rozbite na części
  2. Zrobione; działa. Asercji na SPOJu nie używam
  3. Tak sądziłem

Oto kod:

Jakaś zła lamczyca pomyliła kod z siankiem :(

Jest brzydki - w to nie wątpię. Efekt debugowania i punktu 1. Poza tym w czasie pisania chciałem to zrobić funkcjami bibliotecznymi, ale w czasie pracy uznałem, że lepiej zrobić to w C++. Potem TLE kazało mi to przepisać na C i stąd różne dziwne nazwy zmiennych klepane na kolanie.

Powinien jednak działać a komentarze myślę całkiem dobrze go ratują. Czy ktoś widzi jakiś poważny błąd? A może zrypałem wczytywanie danych? Jeżeli tak, to w jaki sposób?

  1. Nigdy, NIGDY NIGDY!!!! nie używaj typu unsigned, póki nie musisz, a gdy tego nie wiesz [czy musisz, czy nie] to znaczy że nie musisz.
  2. Nigdy, NIGDY NIGDY!!!! nie używaj typu long long, póki nie musisz, a gdy tego nie wiesz [czy musisz, czy nie] to najczęściej znaczy że nie musisz.
  3. Zawsze, ZAWSZE, ZAWSZE!!!! używaj typu int, póki nie musisz większego, a gdy tego nie wiesz [czy musisz, czy nie] to najczęściej znaczy że nie musisz.
  4. Po co liczysz z dokładnością do sekund - bo liczysz - nieprawdasz? Gdy zrezygnujesz, typ int wystarczy - nieprawdaż [broń Cię Panie, przed nieuzasadnionym użyciem unsigned int] Przecież: "... Czas przemarszu wojska zaokrąglamy do pełnych minut w dół ... DÓŁ, DÓŁ!!!" np:
    6 / 7.0 * 60 = 51.42857142857142 minut
    6 / 7 * 60 = 0 <== działania na liczbach całkowitoliczbowych
    6 * 60 / 7 = 51 <== działania na liczbach całkowitoliczbowych
  5. Podobno - tak się chwalisz - czytałeś stare form. Napisałem tam, jak można fajnie wczytywać i wypisywać dane. Więc jeszczre raz [tym razem zamiast cin >> - scanf, wypisywanie bez zmian]
    while (scanf("%d.%d.%d %d:%d %d %d", &rok, &mies, &dzien, &godz, &min, &s, &v) != EOF){
    ......
    printf("%d.%02d.%02d %02d:%02d\n", rok, mies, dzien, godz,min);

Wierzę Ci i dlatego dalej nie czytam :wink:

1 and 2 and 3
Swojego czasu tak robiłem, ale potem okazywało się, że do AC wystarczyło dostosować się do uwagi z forum w rodzaju "zmień typ danych". Niemniej faktycznie tutaj mooocno przesadziłem z typami. Po prostu chciałem być bardzo dokładny
4
No właśnie - AC jak przeszedłem z sekund na minuty. Nadmierna dokładność bywa szkodliwa. Na przykład gdy odpowiada się lepiej niż jest to oczekiwane w zadaniu...
5
Ajajaj... nie wiem jakim cudem zapomniałem o tym zastosowaniu scanfa i printfa. Szczególnie, że już tyle razy to robiłem...

Nie oczekiwałem, że ktoś to będzie czytał. Chciałem tylko, by ktoś to jako tako przejrzał. Miałem dzisiaj dzień strasznej NIEochoty na funkcje i czysty, czytelny i klarowny kod :wink: