[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Олимпиадное программирование ->Методика подготовки к IOI 2007 - ... 1, 2, 3, ... 17, 18, 19, 20, 21, 22, 23, 24
Автор Сообщение
Михаил Брель

Темы: 6
Сообщений: 49

Мой профиль
USACO 15 Feb +2

G1: +1. Изначально использовал map, который работал медленней чем я думал. Его нужно было заменить на gp_hash_table.
G2: +1. В первом решении не доказал асимптотику, из-за чего оно вообще не было правильным.

Выводы: Уделять больше времени доказательству решений/оценке асимптотики.
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 15 Jan +15
B2: +3 С предыдущей задачи оставил ограничения на кол-во городов 500, а надо было 10^4. Не заметил.
Поставил 10^4, стало слетать по памяти.
Реализовал нормальное решение, но забыл изменить крайний слушай ans с 1e18 на 1e9.
S1: +2 В условии не было чётко прописано условие, когда корова в поле зрения.
Неправильно было реализовано разбиение на блоки.
S2: +1 В условии была ошибка, надо было вывести не кол-во полётов, а кол-во городов, которые мы пролетим (за один полёт можно пролететь >1 города).
G1: +9 Долго не мог исправить баг: в условии было сказано: "0 <= x, y <= 1000", а я считал, что 1 <= x, y <=1000. Поэтому минусовал x, y на вводе и поставил массив a[1000][1000], а надо было не минусовать и a[1001][1001]. Запутался. ДАже не думал, что в этом может быть ошибка, ведь обычно задачи корявые (в смысле всё 1..n, а не 0..n-1, и по привычке минусовал).

Выводы:
Теперь с task.cfg ошибки с файлами сведутся к нулю.
Писать медленнее и внимательнее смотреть за ограничениями.
Может вместо крайних случаев 1e18, ставить константу oo, чтоб не путать с 1e9.
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 15 Feb +12
S1: -17 Неправильно обрабатывал случай, когда левая граница скользящего окна обгоняет правую, а также переход на k назад по двусвязному списку.
S2: +1 Забыл брать по модулю при нахождении суммы.
S3: Забыл поставить лонги
G1: +7 Сначала забыл взять по модулю. Потом подбирал hask_map'у (map, unordered_map, gp_hash_table). Потом слетало по памяти, уюрал лонги.

Выводы:
Писать медленнее и внимательнее смотреть на случаи.
Контролировать лонги и модульную ариыметику (не забывать).
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 15 Apr +1
B1: -1 Забыл, что в условии написано, что зашифрованная буква не может быть равна старой.
B2, S1: -2 и -1 соответственно Не знаю почему не проходит, решение похоже на правду.
B3: -1 Не подумал, что корова может вернуться назад и снова разогнаться, так что решение было неверным. Такая же задача S2, но с большими ограничениями. Её я не придумал, но придумал эту. Посчитал глупым кодить эту задачу, при таком невезении и наличии более лёгких нерешённых задач, да и не особо легко её кодить. Если бы я придумал S2, написал бы её и заодно B3, но это не получилось.
B4: +
S1: -1 Разобрал вместе с B2
S2: Усложнённая B3. Не придумал.
S3: +1 Забыл убрать отладочную печать
G2: -2 Придумал решение за O(n^3*log(n)). Понимал, что это вряд-ли пройдёт, но других идей не было. Вдруг тесты плохие? Нет, тесты оказались хорошими. Слетело по памяти.
G3: Усложнённая B3. Не придумал.
Михаил Брель

Темы: 6
Сообщений: 49

Мой профиль
USACO Apr_15 +2

B1: +2. Оба раза неправильно понял условие.

Выводы: Просто быть внимательнее. Особенно в начале контеста, когда ещё не размялся.
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 15 Apr
Page 2
B2, S1: Забыл, что числа могут быть отрицательными, надо было это учитывать при взятии по модулю.
S2: Перепутал с G3. Задача на самом деле лёгкая.
G2: Прочитал в разборе решение за O(n^3) времени и O(n^2) памяти, не придумал оптимизацию на олимпиаде (было O(n^3) памяти).
G3: Читал разбор, плохо понял, сам додумал.
Михаил Брель

Темы: 6
Сообщений: 49

Мой профиль
USACO 14_Jan +5

B2: +3. Неправильно работал с функцией round().
S2: +1. Читал ввод не из того файла.
G1: +1. Не разобрал один крайний случай.

Выводы: Функция round() возвращает переменную типа float\long double. Поэтому вот так писать нельзя:
#include <bits/stdc++.h>

using namespace std;

int main() {
    double x;
    cin >> x;
    cout << round(x);
}

Так как полученное число будет в стандартном виде. Нужно всегда приводить число к типам int\long long,
если собираетесь выводить его. Тогда код будет такой:
#include <bits/stdc++.h>

using namespace std;

int main() {
    double x;
    cin >> x;
    cout << (int)round(x);
}

Михаил Брель

Темы: 6
Сообщений: 49

Мой профиль
Almaty Code Cup 2024

D: +1. Допустил несколько ошибок в коде.

Нужно было проверять решение на большем количестве тестов перед отправкой.
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 14 Jan + 13
B1: +5 Не подумал, что можно обрезать не только до уровня горы, но и между ними.
B2: +3 Боролся с с++. Я не могу объяснить, почему небольшое число (2416992) без setprecision отображается, как 2.41699e+006. Такая запись должна быть по дефолту выключена, и работать, только для чисел, которые не влезают и обрезаются по точности, например: 9.99999999e+100 должно быть так, а 999999999 так. Вывод: ставить перевод в int или setprecision(0).
S3: +3 Пытался решить задачу жадно (и она решается жадно), но сделал баг в коде, и судя по маленьким ограничениям (150), решил написать квадратичную дп, чтобы не делать лишние посылки (но уже успел сделать 3, перебирая возможные решения проблемы). Надо быть внимательнее, и не забывать о разборе случаев даже в начале жадника.
G3: +2 Сделал ошибку в размере массива (написал не ту, надо было написать int a[v.size()], а я написал a[n]), а потом слетало по времени, пришлось заменять вектора на массивы и убирать #define int int64, который делает все 32-ух битные переменные 64-ёх битными (что полезно, при работе с большими числами и сводит к нулю ошибки переполнения числа, но чуть-чуть замедляет код, ведь работа с 64-ёх битными числами медленнее, чем с 32-ух битными).
Михаил Брель

Темы: 6
Сообщений: 49

Мой профиль
USACO 14_Feb

B2, S1 +6. Почему-то на dl стоят неправильные тесты (ограничения в них выше, чем указано в условии).
Причем на сайте USACO тесты другие. Из-за этого долго искал ошибку не в том месте.
G3 +2. Так как времени оставалось мало, написал частичные решения, чтобы проверить идею.

В целом первые задачи были гораздо сложнее, чем обычно, из-за чего я решил временно их пропустить и подумать над остальными.
Думаю на командных олимпиадах так делать не стоит, так как в итоге я получил кучу штрафа. Стоило сразу написать хотя бы B1,
так как решение на неё я знал и не писал только из-за сложной реализации.
Михаил Долинский

Темы: 2072
Сообщений: 49900

Мой профиль


Михаил Брель:

USACO 14_Feb

B2, S1 +6. Почему-то на dl стоят неправильные тесты (ограничения в них выше, чем указано в условии).
Причем на сайте USACO тесты другие. Из-за этого долго искал ошибку не в том месте.
G3 +2. Так как времени оставалось мало, написал частичные решения, чтобы проверить идею.

В целом первые задачи были гораздо сложнее, чем обычно, из-за чего я решил временно их пропустить и подумать над остальными.
Думаю на командных олимпиадах так делать не стоит, так как в итоге я получил кучу штрафа. Стоило сразу написать хотя бы B1,
так как решение на неё я знал и не писал только из-за сложной реализации.  



Про сайт USACO как аргумент мне кажется нужно забыть.

И раньше бывали случаи "На USACO проходит, на DL нет"
И вот самый свежий случай
Полное чтиво

Выдержки:


Геннадий Марцинкевич:

Программирование - профессионалы (ком. 2024) (P/O)
Летний Кубок 2024\15_Apr\Gold\1 - "GOOGOL - interactive" (188381)
http://dl.gsu.by/task.jsp?nid=2363092&cid=1354

Решение проходит на usaco, но не проходит на DL. Пишет на первом тесте: "Incorrect input!".
 



Геннадий Марцинкевич:

По этой задачу на сайте usaco тестируется вообще не моё решение. Я отправил пустой проект:
#include <bits/stdc++.h>

using namespace std;

main(){

}

И оно всё равно прошло
 


Тесты ставятся автоматически из оригинальных архивов.
Какие они прислали, такие мы и поставили.
Может они потом у себя условия поправили и тесты?

Ты молодец, что нашёл ошибку созданную несоответствием условия и тестов.
Но непонятно, как все наши остальные не "обманулись", а сдавали задачу без проблем.

Если тебе проще сдать G1 чем B1 - твоё право - надо писать то, что быстрее ТЕБЕ сдать.

НО, проблема здесь

с 9.00 до 11.03 ты работал неплохо.
А вот потом, ты переключился на G3. BOARDING

Хотя ты видел по таблице, что все сдают AUTO и MIRROR
MIRROR ты сдал за 30 минут, а две AUTO за 5 минут, после того как к ней вернулся.

04.08.2024 13:40:22 04.08.2024 13:40:34 Брель Михаил Программирование - профессионалы (ком. 2024) 3. BOARDING 333 Все тесты успешно пройдены
04.08.2024 13:02:21 04.08.2024 13:02:28 Брель Михаил Программирование - профессионалы (ком. 2024) 1. AUTO 333 Все тесты успешно пройдены
04.08.2024 13:02:02 04.08.2024 13:02:10 Брель Михаил Программирование - профессионалы (ком. 2024) 2. AUTO 333 Все тесты успешно пройдены
04.08.2024 12:57:42 04.08.2024 12:57:49 Брель Михаил Программирование - профессионалы (ком. 2024) 1. MIRROR 333 Все тесты успешно пройдены
04.08.2024 12:28:25 04.08.2024 12:28:32 Брель Михаил Программирование - профессионалы (ком. 2024) 3. BOARDING 33 не пройден 2-й тест (неверный ответ)
04.08.2024 12:08:22 04.08.2024 12:08:31 Брель Михаил Программирование - профессионалы (ком. 2024) 3. BOARDING 33 не пройден 2-й тест(снято по времени (>2 сек))


04.08.2024 11:03:17 04.08.2024 11:03:26 Брель Михаил Программирование - профессионалы (ком. 2024) 1. RBLOCK 334 Все тесты успешно пройдены
04.08.2024 11:02:58 04.08.2024 11:03:07 Брель Михаил Программирование - профессионалы (ком. 2024) 2. RBLOCK 333 Все тесты успешно пройдены
04.08.2024 10:36:07 04.08.2024 10:36:15 Брель Михаил Программирование - профессионалы (ком. 2024) 2. DEC 333 Все тесты успешно пройдены
04.08.2024 10:21:26 04.08.2024 10:21:34 Брель Михаил Программирование - профессионалы (ком. 2024) 3. SCODE_SILVER 334 Все тесты успешно пройдены
04.08.2024 10:00:28 04.08.2024 10:00:41 Брель Михаил Программирование - профессионалы (ком. 2024) 1. AUTO 165 не пройден 6-й тест. Решение вызвало ошибку Runtime Error -1073741819
04.08.2024 09:56:52 04.08.2024 09:57:07 Брель Михаил Программирование - профессионалы (ком. 2024) 2. AUTO 165 не пройден 6-й тест. Решение вызвало ошибку Runtime Error -1073741819
04.08.2024 09:56:04 04.08.2024 09:56:16 Брель Михаил Программирование - профессионалы (ком. 2024) 2. AUTO 165 не пройден 6-й тест. Решение вызвало ошибку Runtime Error -1073741819
04.08.2024 09:50:05 04.08.2024 09:50:15 Брель Михаил Программирование - профессионалы (ком. 2024) 2. AUTO 165 не пройден 6-й тест. Решение вызвало ошибку Runtime Error -1073741819
04.08.2024 09:42:57 04.08.2024 09:43:09 Брель Михаил Программирование - профессионалы (ком. 2024) 2. AUTO 165 не пройден 6-й тест. Решение вызвало ошибку Runtime Error -1073741819
04.08.2024 09:38:02 04.08.2024 09:38:13 Брель Михаил Программирование - профессионалы (ком. 2024) 2. AUTO 165 не пройден 6-й тест. Решение вызвало ошибку Runtime Error -1073741819
04.08.2024 09:21:21 04.08.2024 09:21:32 Брель Михаил Программирование - профессионалы (ком. 2024) 3. SCODE_BRONZE 334 Все тесты успешно пройдены
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 14 Feb +6

B1: +2 Забыл убрать отладочные выводы
S3: +3 Сначала не заметил, что нужно брать по модулю, потом исправил ошибку, допущенную по невнимательности в похожей (упрошённой) B3 (там, видимо оказались плохие тесты и решение зашло)
G2: +1 Ошибся в названии переменной


Вывод: внимательнее смотреть модули
Михаил Брель

Темы: 6
Сообщений: 49

Мой профиль
USACO 14_Mar

G3 +3. В первой посылке забыл изменить файлы. Во второй была правильная идея, но медленная реализация. В третьей была ошибка в коде.

Думаю я поспешил с написанием этой задачи. Нужно было подумать на 10 минут больше и сразу придумать полное решение.
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 14 Mar +6

B1: +3 Сначала забыл изменить файлы. Потом понял, что одиночные циклы за циклы не считаются (в условии об этом не было написано, и по тесту было непонятно), а также кто-то, кто составлял условие задачи додумался выводить -1, когда ответ 0. Я этого не заметил в условии, потому что даже не думал, что такая фигня может встретиться. Результат: +1 лишняя посылка.
B2: +2 По началу забыл, что k * 2 + 1 может превосходить 10^6, потом увидел, что числа не в диапазоне [1,10^6], а [0,10^6], из-за этого я минусовал и получал выход за границы массива.
S1: +1 Забыл, что необязательно может получиться ответ и надо будет выводить -1.

Выводы: стратегия CF'а тут не работает (прочитать половину условия, посмотреть на тесты), тут даже мало прочитать условие. Надо ещё смотреть на формат вывода (чтобы выводить -1, когда по логике можно было бы выводить 0), а также тесты, которые зачастую имеют ответ на спорные неоговоренные в условии вопросы.
Геннадий Марцинкевич

Темы: 2
Сообщений: 88

Мой профиль
USACO 14 Apr +6

B1: +4 Почему-то я взял, что ограничение на размер числа 10^6, а не 10^16 (и, кажется, я нашёл причину, в 2 местах написано, что 10^16, а в третьем 10^6, вот я и подумал, что 10^6). Поэтому написал тупой перебор и сильно удивился, увидя TL7. Подумал, что это из-за лонгов (всё-таки решение не такое уж и быстрое, может где константа больше, чем я думаю) - второе TL. Перечитываю условие. Понял, что ограничение 10^16. Стал писать нормальное решение, но и в нём допустил баг. Потом, вернул обратно лонги, но получилось, что функция, которая мне помогала, стояла до лонгов (совсем про неё забыл) - получил CE (тут легко сказать: "Так надо же было перекомпилировать и посмотреть!" Я согласен, надо было, но я был так уверен, что посчитал это ненужным. В конце концов, если бы я проверял ВСЁ, то мне бы не хватало времени сдать и пару задач. Спортивное программирование, это спорт в котором важно не только качество, но ещё и время, поэтому порой приходится рисковать, чтобы его сэкономить).

B2: -3 Сначала я забыл про отрезки одного цвета, потом вспомнил, но реализовал неправильно: только на префиксе. Затем нашёл ошибку и всё равно реализовал неправильно (только по другой причине: забыл, что могут отрезаться не только другие цвета, но и этот тоже, итог - всё также это работало только на префиксе).

B3: +2 Задачка изичная, но я забыл, что может не получиться всё раскрасить и надо выводить -1. Потом нашёл, что я не для каждой компоненты нахожу максимум из цветов, а только для суммы цветов.

На более трудные задачи я трачу меньше попыток, т. к. их писать довольно медленно и следовательно вдумчивее, чем в лёгких, на которых не надо долго задерживаться. Грубо говоря, в более тяжёлых я отлавливаю баги сразу, потому что их (задачи) и писать дольше, и если я что-то не продумаю - придётся заново переписывать большой и трудный код, да и если я его всё таки допустил, то найти его после отправки законченного кода почти невозможно. Пример: на B1, которую все сдавали сразу, я потратил 5 попыток и около получаса времени, а на S2 всего 1 попытку и тоже около получаса времени. Трудно объяснить этот парадокс, но мне ВСЕГДА более трудные задачи было писать легче, чем те, которые полегче.
 
Индекс форума ->Олимпиадное программирование ->Методика подготовки к IOI 2007 - ... 1, 2, 3, ... 17, 18, 19, 20, 21, 22, 23, 24
Time:0,062