Мои решения задач курса "Тренировки по алгоритмам" от Яндекса на языках C++ и Python
Часть 1.0 (2021)
№ | Лекция | Решения 1.0 |
---|---|---|
1 | Сложность, тестирование, особые случаи | 10/10 C++ |
2 | Линейный поиск | 10/10 C++ |
3 | Множества | 10/10 C++ |
4 | Словари и сортировка подсчётом | 10/10 C++ |
5 | Префиксные суммы и два указателя | 10/10 C++ |
6 | Бинарный поиск | 11/11 Python |
7 | Сортировка событий | 2/10 Python |
8 | Деревья | 10/10 C++/Python |
Контест | Решения |
---|---|
Тренировочный контест - бэкенд | 2/5 Python/C++ |
Проблема с типом int в C++ (встречается в занятиях 2: G,H / 4: E,F / 5: D,G)
Проблема: Ошибка WA на больших количествах тестах: 10-50
Причина: В данных заданиях используются большие значения, которые превосходят тип int в C++, т.е. больше
Решение: Следует использовать long
Совет: Смотрите внимательно на ограничения по значениям в задании. Также учитывайте особенности C++, например, дан код:
long count = 0;
int rangeLen = r - l;
count += (rangeLen - 1) * (rangeLen - 2) * 3;
В данном случае rangeLen
не может быть больше (rangeLen - 1) * (rangeLen - 2) * 3
вполне может, и, не смотря на то, что слева переменная типа long
, выражение справа всё ещё int
и, в результате, к count
прибавиться переполненное значение. Поэтому в данном случае rangeLen
должен быть long
.