Четвърта тренировъчна сесия
Fourth Training Session
Тренировка
В тренировките до сега имаше лесен начин да намерите грешката си, ако решението ви е грешно. Както USACO, така и TopCoder тренировките дават точния тест, на който програмата ви бърка. Това обаче съвсем не е така на истински състезания. Много полезно е да тествате решението си добре, преди да го предадете (или преди да предадете финалната версия в IOI-style състезания). Тази тренировка е предимно за това, като допълнително ще ви сблъска с по-сложни задачи, понякога съдържащи неочевидни частни случаи.
Цел
Да се научите как да тествате решенията си и да свикнете сами да намирате грешките си. Да срещнете няколко по-математическо насочени задачи. Да се запознаете с ACM-style начина на тестване.Задачи
За целта ще ползваме руския сайт Timus, най-вече защото:- Руските задачи често имат много tricky тестове
- Руските задачи често съдържат в себе си математика и/или геометрия
- Задачите в Timus са ACM стил, тоест няма да ви бъде казано къде грешите и ще трябва да намирате грешките си сами
Аудитория
Добрите състезатели от C и B група, както и тези от А. Ако участвате в TopCoder се очаква да сте син или жълт.Изисквания
Да имате регистрация на сайта на Timus, но освен това нищо специално. Системата в Timus е една от най-лесните за ползване, които сме срещали, така че не мислим, че ще имате проблеми с нея.Начин на трениране
От вас се иска да решите 90 задачи от Chapter 1 (които и да е 90, стига да са само от него!). Няма голямо значение в какъв ред ги решавате, даже често ако "забиете" на някоя задача може да минете на някоя друга. Помъчете се сами да решите задачата и сами да откриете защо решението ви е грешно (WA%d). За целта може да се наложи да си правите генератор на тестове, бавно (но вярно) решение или подобни техники, които са полезни и на IOI състезания. Готиното е, че може да изберете 90-те задачи, които на вас са ви най-лесни (тоест вие избирате кои 10 задачи да "оставите" и да не решавате).Както има много прости задачи (A+B Problem), така има и много сложни такива. Ако наистина от много време сте забили на дадена задача и не можете да я измислите, или "тоя 7-ми тест не минава и не минава", погледнете discussion board-а за съответната задача. Но прибягвайте за него само ако наистина не можете да направите нищо повече по нея.
Огромна грешка е да прочетете задачата, да отидете в discussion board-а и да видите как става, без да сте помислили задълбочено или да сте пробвали да я направите сами. Също така не помага много да я напишете, получите WA7 и веднага да отидете в discussion board-а за да видите какъв е теста (за някои от задачите има хинтове или самите по-трики тестове).
Ако получите WA или TL на някой тест, преди да прибегнете до discussion board-а, пробвайте да намерите проблема сами. Погледнете кода си за имплементационни грешки. Направете си малко по-сложен (от примерните) тест на ръка. Вижте дали програмата ви вади правилен отговор за него. Помислете какви са частните случаи на задачата. Помислете какво би било гаден тест (това е по-скоро за time limit отколкото за wrong answer). Помислете защо Greedy би било грешно, ако сте писали такова. Ако имате TL помислете дали сложността на решението ви е достатъчно добра за дадените ограничения. Помислете дали тя наистина е такава (тоест няма много специфичен тест, при който подходът ви да не се държи толкова добре). Ако има такъв тест, то най-вероятно руснаците са го намерили :) Направете си генератор и бавно решение, пуснете го на няколко стотин/хиляди теста. В голяма част от случаите това ще е достатъчно да си намерите грешка.
Разбира се, има и задачи с много хитри тестове. Ако горните методи за откриване на проблема не дадат резултат, не остава какво друго да направите, освен да погледнете в discussion board-а или да питате някого, който я е решил.
Продължителност
На мен лично тази тренировка ми отне едно лято (2-3 месеца), но в същото време ходих и на работа, така че нямах толкова много време да решавам. Също така я започнах когато бях все още зелено-син в TopCoder, което може би беше причина да свърша с нея малко по-бавно отколкото е възможно. Все пак, като цяло очакваното време е между един и три месеца.Резултат
След тази тренировка ще сте подготвени за (или поне ще очаквате xD) задачи с трики тестове. Ще обръщате много повече внимание на частните случаи. Също така ще сте по-запознати със ACM-стил задачите. Ще подобрите challenge skill-овете си в TopCoder. След нея се очаква да станете във високите нива на жълтото, доближавайки се до червеното в TopCoder.
За да предложите корекция, селектирайте думата или текста, който искате да бъде променен,
натиснете Enter и изпратете Вашето предложение.
натиснете Enter и изпратете Вашето предложение.
Страницата е посетена 4613 пъти.