Ostatnie posty

potwierdzam
Potwierdzam paczkę o hashu podanym przez Franciszka Witta
potwierdzam
potwierdzam
Wypisano to w harmonogramie:
https://potyczki.mimuw.edu.pl/harmonogram/
Polecam - Ja
potwierdzam

8b854e4b00d35a6774f666a4d98c38ba4e78b4e379146a2a52da219369e10c29 oranzada.zip
potwierdzam

8b854e4b00d35a6774f666a4d98c38ba4e78b4e379146a2a52da219369e10c29 oranzada.zip
Chyba przez przypadek się pojawiły. Choć chętnie poznałbym powód dla którego organizatorzy publikują rozwiązania dopiero po zakończeniu rund zdalnych.
Rzeczywiście nie jest to powiedziane, a IMHO powinno, bo w ten sposób, to clear() mógłby robić sleepa na 5 sekund i też by było zgodne ze standardem :)
Okazuje się, że jednak jest technicznie zgodne ze standardem, bo:

https://eel.is/c++draft/container.requirements.general#2
> All of the complexity requirements in this Clause are stated solely in terms of the number of operations on the contained objects.

Jak mapa jest pusta, to clear() robi 0 operacji na elementach mapy -- ale ma prawo zrobić sobie ile chce innych obliczeń.
Czy rozwiązania z rundy próbnej pojawiły się przez przypadek, czy raczej przez przypadek zniknęły?
W takim razie kolejne czyszczenia powinny być już szybkie, bo m.size() po pierwszym się zeruje. To wygląda na niezgodność ze standardem, zwłaszcza że jest wprost napisane, że nie chodzi o ilość koszyków tylko ilość elementów:

> DR LWG 2550
> Applied to C++11
> Behavior as published for unordered associative containers, unclear if complexity is linear in the number of elements or buckets
> Correct behavior clarified that it's linear in the number of elements
Kiedy będą zadania
> Problemem jest niewłaściwe używanie unordered_mapy, a dokładniej metody clear().

Najgorsze, że standard języka C++ mówi, że m.clear() musi mieć złożoność O(m.size()).

https://en.cppreference.com/w/cpp/container/unordered_map/clear

Tylko jak się wczytać dokładniej w specyfikację, to okazuje się, że liczą tutaj tylko operacje na elementach, a nie całkowity czas działania metody.