Недавно ballon в обсуждении SnarkNews winter series сказал, что мне пора делать скринкасты. Не знаю, многим ли интересно что-то такое увидеть, но пусть будет. Как я ответил в той теме, регулярно писать скринкасты я не вижу смысла. Но один контест все же решил записать — для тех, кому интересно; для упрощения ответа всем тем, кто задает вопросы вида "секрет красного цвета в правильной настройке Visual Studio" (да, есть пользователи, которые вроде бы вполне серьезно спрашивают подобные вещи); да и просто испробовать новый опыт.
Ниже — запись моего участия в SNWS 2015 Round 4. Весь экшн оканчивается на 47 минуте, когда все задачи сданы, дальше только обновление монитора.
Круто! Можешь подробнее рассказать принцип чтения условий? :)
Было ощущение, что ты читаешь с нескольких страниц сразу по паре предложений. И по большей части только сэмплы. Я не успеваю прочитать даже половину условия к моменту, когда ты уже начинаешь кодить... :)
UPD: Кажется, нашел частичный ответ на свой вопрос здесь.
Верх А прочел, пока открывал другие; дальше действительно начинал с сэмплов. Там есть надежда, что повезет быстро найти что-то очевидное/короткое/знакомое (как было с D в первом туре); по семплах так же часто видно, понравится ли задача в плане кодинга — например, читаешь-читаешь, вроде бы просто и понятно, можно писать, а потом увидел, что нужно еще очень неприятное восстановление ответа, и формат аутпута весьма тупой и с кучей случаев...
Еще, если начинать с ограничений, то это очень сильно помогает в решении. В задаче С сразу бросается в глаза маленькая точность, например. По D я сначала наугад написал "наверное какая-то динамика за квадрат", а потом еще 3-4 минуты придумывал детали динамики, потому что она не была для меня очевидной. Не всегда выигрышная стратегия — здесь бывают обидные проколы, как когда я на тренировке час убил на довольно очевидную О(N6), увидев N < = 20 и пытаясь придумать O(2N)
Главное — общее понимание условия, а дальше уж как пойдет. Пока пишешь различные считывания инпута и т.д. — условие можно дочитать и разобрать, оно ведь есть сбоку. На Яндексе с этим особенно удобно, на других сайтах, где условие во весь экран — нужно немного изощренней делать, обычно я сжимаю браузер в полэкрана.
И с решением аналогично. Как я сейчас понимаю, по E и F можно было все сделать намного проще и короче, но для этого нужно было подумать) Из-за "придумывания на ходу" — бывают довольно странные вещи в решении. Например, по F я считал w,h, а потом чуть позже втупую переименовал их ниже в коде, потому что понял, что так будет удобнее. По E у меня есть счетчик outdeg, который вообще нигде не используется — только потому что часто в таких задачах он нужен)
А еще бывает, что задача падает из-за весьма глупого бага, потому что спешил. По довольно простой D из третьего тура у меня минус из-за того, что я сдал вообще не ту задачу — я там считал что-то вроде количества возможных развитий матча, а не количества возможных итоговых счетов. Ну это вообще рулетка получается) С упором на скорость, почти без тестирования; если где-то что-то не так, то почти наверняка все плохо; зато если все нормально, то это очень хорошее место.
Я пишу мало контестов в таком стиле, обычно ведь времени больше, задачи сложнее... В Петрозаводске даже самая простая задача набора, вероятно, будет довольно сложной по меркам SNWS. И даже простые задачи на СF/TC тестируются более тщательно, чем любая из-задач скринкаста. А если бы я так командные контесты решил писать, то сокомандники бы меня... не поняли бы они меня:)
Скринкаст передает сам стиль написания
говнокода. Например, оглашать переменные в самом конце, да еще и глобально — наследие того, что сначала некоторое время я писал на Pascal.Видимо у меня старая архитектура процессора в голове :) Мне трудно одновременно кодить и читать условие... Надо попрактиковаться)
А ты произносишь прочитанные слова про себя в голове, или нет?
Задумался над вопросом о словах:) Он не совсем понятный мне. Если я правильно понял, о чем идет речь — преимущественно я в голове подпеваю тому, что играет в наушниках)
Так ведь "кодить" — понятие растяжимое. Есть вещи, над которыми надо думать, а когда пишешь cin>>tests; for (;tests;--tests) в тысячный раз, то это как-то механически уже. Ты ведь когда за завтраком газету читаешь — не думаешь над тем, как ложкой в рот попасть.
Ага, понятно :)
Мне просто интересно, использует ли кто-нибудь из сообщества реально какие-либо техники скорочтения или это всё чепуха.
Насчет вопроса о словах... Насколько я знаю, подобные методики основаны на подавлении субвокализации (внутреннего проговаривания читаемого текста). Отсюда и вопрос был.
Если бы это существенно ускоряло процесс, было бы здорово :)
You type really fast. BTW how do you get some-sort of random lyrics at the top of your code?
They aren't "random" :) It often happens that song from the top was actually playing while I was writing a solution or some time before/after it.
I can actually type it, or just copy-paste — first way takes some time but gives one more opportunity to improve typing skills.
What is your typing method? What fingers do you use to type special characters like '[',']','<','>' etc?
I am curious to know about some of your #define's for example #define y0 sdkfaslhagaklsldk.
Also, Congratulations on leading the contest You haven't mentioned that here. Really humble of you.
y0, y1, left, right and some other names can't be used as the names of global variables because they are defined in some of the headers.
Thanks I didn't know that. I wonder what's the problem with asking something here about the code or commenting the fact that a person is down to earth. Thanks again dalex .