Сёння у партугальскім горадзе Порту пройдзе фінал міжнародных спаборніцтваў па праграмаванні ICPC 2019. У ім прымуць удзел прадстаўнікі Універсітэта ІЦМА і іншыя каманды з ВНУ Расіі, Кітая, Індыі, ЗША і іншых краін. Раскажам падрабязней.
icpcnews /Flickr/ CC BY / Фота з фіналу ICPC-2016 у Пхукет
Што такое ICPC
ICPC - гэта міжнародныя спаборніцтвы па праграмаванні сярод студэнтаў. Яны праводзяцца больш за 40 гадоў - першы фінал прайшоў у далёкім 1977 годзе. Адбор праводзіцца ў некалькі этапаў. ВНУ разбіваюць па рэгіёнах (Еўропа, Азія, Афрыка, Амерыка і інш). У кожным з іх ладзяць прамежкавыя этапы, у прыватнасці, паўфінал Паўночнай Еўразіі. праходзіў у нашым універсітэце. Пераможцы рэгіянальных этапаў бяруць удзел у фінале.
На ICPC камандам з трох удзельнікаў з дапамогай аднаго кампутара (не падлучанага да інтэрнэту) прапануецца вырашыць шэраг задач. Такім чынам, апроч навыкаў праграмавання правяраюцца і навыкі каманднай працы.
На час спаборніцтва каманды атрымаюць адзін кампутар на траіх. Ён працуе пад кіраваннем Ubuntu 18.04 і мае прадусталяваныя рэдактары vi/vim, gvim, emacs, gedit, geany і kate. Пісаць праграмы можна на Python, Kotlin, Java ці C++.
Калі каманда вырашае задачу, яна перасылае яе які тэстуе серверу, які ацэньвае код. Удзельнікі не ведаюць, якія менавіта выпрабаванні праводзіць машына. Калі ўсе яны праходзяць паспяхова, каманда атрымлівае прызавыя ачкі. У адваротным выпадку генеруецца памылка, і студэнты адпраўляюцца карэктаваць код.
Па правілах ICPC перамагае каманда, якая вырашыла больш за ўсіх задач. Калі такіх каманд некалькі, то пераможца вызначаецца па найменшым штрафным часе. Удзельнікі атрымліваюць штрафныя хвіліны за кожную вырашаную задачу. Колькасць хвілін роўна часу ад пачатку спаборніцтва да прыняцця задачы тэставым серверам. Калі каманда знайшла рашэнне, то яна атрымлівае яшчэ XNUMX хвілін штрафу за кожную няправільную спробу яе здаць.
icpcnews /Flickr/ CC BY / Фота з фіналу ICPC-2016 у Пхукет
Прыклады задач
Задачы чэмпіянату патрабуюць ад каманд зладжанасці дзеянняў і канцэнтрацыі. Дадаткова яны правяраюць веды асобных матэматычных алгарытмаў. Вось прыклад задання, якое прапаноўвалася ўдзельнікам ICPC 2018:
У друкарні існуе тэрмін "рака" - гэта паслядоўнасць прабелаў паміж словамі, якая ўтвараецца з некалькіх радкоў тэксту. Нейкі эксперт па рэках (сапраўдным) жадае выпусціць кнігу. Ён жадае, каб пры друку монашырынным шрыфтам на старонцы «ўтвараліся» самыя доўгія друкарскія рэкі. Удзельнікам трэба было вызначыць шырыню палёў, пры якім гэта ўмова будзе выконвацца.
На ўваходзе праграма атрымлівала цэлы лік n (2 ≤ n ≤ 2 500), які вызначае колькасць слоў у тэксце. Далей, уводзіўся тэкст: словы на адным радку падзяляліся адным прабелам і не маглі складацца больш за з 80 знакаў.
На выхадзе праграма павінна была паказаць шырыню палёў, пры якой утвараецца самая доўгая "рака", і даўжыню гэтай ракі.