М И Н И СТ Е РСТ В О О БРА ЗО В А Н И Я РО ССИ Й СК О Й Ф Е Д Е РА Ц И И В О РО Н Е Ж СК И Й ГО СУ Д А РСТ В Е Н Н ЫЙ У Н И В Е РСИ Т Е Т
О .Ф .У скова О .Д .Гор бенко А .И .Ш аш кин
О ЛИ М П И А Д Н ЫЕ ЗА Д А ЧИ П О П РО ГРА М М И РО В А Н И Ю . ЛУ ЧШ И Е РЕ Ш Е Н И Я Часть6
У чебноеиздание
В О Р О Н Е Ж – 2003
36
Б Б К 32.97 У Д К 681.3
О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю . Л у чш и е ре ш е н и я. В ш е сти частях. Часть 6.: У че бн ое и зд ан и е / О .Ф .У ск ова, О .Д .Горбе н ко, А.И.Ш аш к и н – В орон е ж: В орон е жски й госу д арстве н н ы й у н и ве рси те т, 2003 – 34 с.
С борн и к составле н п о м ате ри алам Ре ги он альн ой сту д е н че ской и н те рн е т-оли м п и ад ы п о п рограм м и рован и ю , п освяще н н ой 85-ле ти ю В орон е жск ого госу н и ве рси те та. Б Б К 32.97 У Д К 681.3 Пе чатае тся п о ре к ом е н д аци и ре д ак ци он н о-и зд ате льск ого сове та ф ак у льте та п ри к лад н ой м ате м ати ки , и н ф орм ати ки и м е хан и к и В орон е жск ого госу н и ве рси те та Ре це н зе н т – кан д и д ат ф и зи ко-м ате м ати че ски хн ау к , д оце н т Л .С.М и ловская ISBN 5-815-047-0 © В орон е жск и й у н и ве рси те т © О .Ф .У ск ова, О .Д .Горбе н ко, А.И.Ш аш к и н
35
П РЕ Д И СЛО В И Е
Авторы : д оц. О .Ф .У ск ова, д оц. О .Д .Горбе н к о, п роф . А.И.Ш аш ки н О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю . Л у чш и е ре ш е н и я. В ш е сти частях. Часть6.: У че бн ое и зд ан и е / О .Ф .У ск ова, О .Д .Горбе н ко, А.И.Ш аш к и н – В орон е ж: В орон е жск и й госу д арстве н н ы й у н и ве рси те т, 2003 – 34 с.
И з д ание п од г от овле но п о мат е риалам Р егио н а л ь н о й ст уден ческо й о л им п иа ды п о п ро гра м м иро ва н ию , п освящ е нной 85-ле т ию Вороне жског о г осу ниве рсит е т а, оно може т быт ь т акж е п оле з но ш кольникам ст арш их классов, ст у д е нт ам и у чит е лям инф ормат ики общ е образ оват е льных и п роф ильных у че бных з аве д е ний. О рг аниз ат ором олимп иад ы являе т ся каф е д ра м ат е м ат иче ског о обе сп е че ния Э ВМ ф аку льт е т а п риклад ной м ат е м ат ики, инф орм ат ики и ме ханики Вороне жског о г осу ниве рсит е т а. В п е рвой част и рассм ат ривались з ад ачи п ре д ш е ст вовавш их олим п иад п о инф орм ат ике раз личног о у ровня (ф аку льт е т ских, вузовских, м е ж ву з овских, ре г иональных, ф е д е ральных). Не кот орые з ад ачи п риве д е ны с ре ш е ниям и, в основном раз работ анным и ст уд е нт ам и ф акульт е т а п риклад ной мат е мат ики и ме ханики Вороне жског о у ниве рсит е т а, ст авш ими в свое вре мя п риз е рам и эт их олим п иад . Во вт орой част и п ом им о з ад ач, п ре д лож е нных на олим п иад ах раз личног о у ровня, были п ре д ст авле ны м ат е риалы п е рвог о (з аочног о) т ура ш колы-олимп иад ы. В т ре т ье й част и п ре д ст авле ны м ат е риалы Вт орой от крыт ой ре г иональной ст уд е нче ской ш колы- олим п иад ы п о п рог рам мированию и комп ью т е рномумод е лированию . Че т ве рт ая част ь д оп олняе т их анализ ом ре з у льт ат ов п е рвог о т ура и лу чш им и ре ш е ниям и п обе д ит е ле й п е рвог о т у ра. В п ят ой част и п ре д ст авле ны ре з ульт ат ы вт орог о т у ра Вт орой от крыт ой ре г иональной ст уд е нче ской ш колы-олим п иад ы по п рог рам м ированию и комп ью т е рномум од е лированию и из бранные ре ш е ния з ад ач. Наст оящ ая ш е ст ая част ь п од вод ит ит ог и Ре г иональной ст уд е нче ской олимп иад ы п о п рог рамм ированию , п освящ е нной 85ле т ию Вороне ж ског о г осу ниве рсит е т а.
34
3
Резу льтаты 2 ту р аП ер вой откр ы той р егиональной сту денческой ш колы -олим п иады п оп р огр ам м ир ованию и ком п ью тер ном у м оделир ованию О тк ры тая ре ги он альн ая сту д е н че ск ая ш к ола-оли м п и ад а п о п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю п ровод и тся в рам ках Ф е д е ральн ой це ле вой п рограм м ы "Ин те граци я н ау к и и образован и я", н ап равле н и е 2.7 "Прове д е н и е н ау чн ы хкон к у рсов, ш коли к он ф е ре н ци й д ля сту д е н тов, асп и ран тов, м олод ы х п ре п од авате ле й и сотру д н и к ов ву зов и н ау чн ы х орган и заци й ", п рое к т Т0140. Головн ая орган и заци я п рое кта В орон е жски й госу д арстве н н ы й у н и ве рси те т. Ф .И .О . у частников К олбе ш к и н Д м и три й М и хайлови ч Проси н Се рге й Але к сан д рови ч Гайд ай В и к тор Н е к расов Стан и слав Ю рье ви ч М у хое д ов Д м и три й Се рге е ви ч Глад ы ш е в О ле г В и к торови ч В ы ростк ов Д м и три й Ан д ре е ви ч Затворн и цк и й Але к сан д р Пе трови ч К ли н ск и хАн тон Але к сан д рови ч Гром ов С тан и слав Ан д ре е ви ч К орн и е н к о Стан и слав Альбе ртови ч Ш и ряе в М и хаи лМ и хаи лови ч Б у рн ае в К он стан ти н Е вге н и е ви ч Н ови ков Але ксан д р В аси лье ви ч М и н ак ов Се рге й Х ау и М ари я Аброси м ов А ле к сан д р Исае ва Татьян а М и хайловн а К атов М и хаи лВ и к торови ч М авле тк у лов Ан д ре й Л е он и д ови ч Т и ще н к о Иван Иван ови ч
4
Б аллы 11 10 8 8 7 6,5 6 6 6 5 5 5 4 4 4 3 2 2 2 2 2
found := false; min := N; while (min < 109) and (not found) do begin {п рове ряе м тольк о че тн ы е чи сла} if min mod 2 = 0 then begin {н аход и м чи сло д е ли те ле й} if CountDividers(min) = N then found := true; end; inc(min); end; if found then Result := min - 1 else Result:=0; end; begin Assign(f,'Input.txt'); reset(f); ReadData(f,N); M := CountMinNum(N); close(f); AssignFile(f,'Output.txt'); rewrite(f); if M > 0 then writeln(f,'Min men num -> ' + IntToStr(M)) else writeln(f,'Invalid variant num! '); close(f); end.
33
Реш ение program task1; {$APPTYPE CONSOLE} {А втор ре ш е н и я - сту д е н т 3 к у рса ф ак у льте та к ом п ью те рн ы хн ау к Б у лгаков И гор ь, п обе д и те льоли м п и ад ы . Алгори тм осн ован н а п ои ске че тн ого чи сла облад аю ще го к оли че ством д е ли те ле й совп ад аю щи м ск оли че ством сп особов п острое н и я у частн и ков.} uses SysUtils; var f : Text; M,N : integer; procedure ReadData(var f : Text; var N :integer); begin while not eof(f) do readln(f,N); end; function CountDividers(N : integer) : integer; var i : integer; count : integer; begin count := 0; for i := 1 to N do if (N mod i = 0) then inc(count); Result := count; end; function CountMinNum(N : integer) : integer; var min : integer; found : boolean; begin
32
Б е лоброд ск и й Ан д ре й Ан д ре е ви ч В ахти н Се рге й Але к сан д рови ч В орон и н а Татьян а Иван овн а Гаш к ов М акси м Але к сан д рови ч Гри д н е в Але к сан д р Н и к олае ви ч Д е сятов Але к се й Д м и три е ви ч Д ок у чав М и хаи лЮ рье ви ч Заколод яжн ы й Ю ри й В и кторови ч Иван ов О ле г О ле гови ч К озлов Ю ри й Стан и славови ч К озлова О льга В и к торовн а К оле сн и к ов М акси м Але к сан д рови ч Л е сн и ков Д м и три й В яче славови ч М алаш е н ко О ле г П Пле ш кова О к сан а Игоре вн а Прон и н С е рге й Се рге е ви ч Ры ш к ов Е вге н и й В але рье ви ч Се м е рн и н Се рге й Павлови ч Су ве йкэ Е вге н и й Ге орги е ви ч Ту зов Се рге й Чу лю ков Але к се й В лад и м и рови ч Я к у н и н М акси м Се рге е ви ч Б е лоу сова Ю ли я В лад и м и ровн а В озн ю к Д м и три й Л е он и д ови ч Д ом бровск ая О льга В але рье вн а Иван н и к ов М ак си м Игоре ви ч Иван ов Ан д ре й В аси лье ви ч К ад и м ов О ле г Н ари м ан ови ч К арп ю к Д м и три й Але ксан д рови ч К ом ова Ан н а Ан атолье вн а К у ри н М и хаи лСе рге е ви ч К у роп атки н Ан д ре й Се рге е ви ч Л огу н ов Се рге й Иван ови ч М и хали н Ром ан В але рье ви ч
5
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0,5 0,5 0,5 0,2 0,2 0,2 0,5 0,2 0,5 0,5 0,2 0,2
Н е у м ы вак и н Се рге й Се рге е ви ч О к у н е в Але ксан д р Иван ови ч Пе ров Се рге й Н и к олае ви ч Саве лье в К он стан ти н Эд у ард ови ч Х ау стов Д м и три й В аси лье ви ч
К оржов Н и колай Е вге н ье ви ч Д е сятов Ан д ре й Д м и три е ви ч Си д оре н к о Стан и слав В лад ле н ови ч Глу хов Арте м Л е он и д ови ч Л огу н ов Се рге й Иван ови ч Пи саре вски й Се рге й Ю рье ви ч Ан д ре йчи к ов В аси ли й А н д ре е ви ч К оле сн и к Арте м В але рье ви ч Л ари н ИгорьАле к сан д рови ч Х лоп к ов Ан д ре й Д у рак ов Ром ан А ле к сан д рови ч Архи п ова Ири н а Н и к олае вн а Б е зрод н ы й Але ксе й Н и к олае ви ч
В ГУ В ГУ В ГУ
13 12 10
В ГУ В ГУ В ГТУ В ГУ В ГТА В ГУ В ГУ В ГПУ В ГУ В ИРЭ
8 7 6 5 5 5 5 3 1 0
бы ло, чтобы п ри лю бом п е ре строе н и и коли че ство лю д е й в кажд ой колон н е бы ло од и н ак овы м . Чтобы ре ш и тьэ ту зад ачу ре жи ссе ру н е обход и м о зн ать, к ак ое м и н и м альн ое чи сло у частн и к ов М е м у д ля э того п он ад оби тся. Н ап ри м е р, д ля слу чая N=3 п отре бу е тся п ри гласи ть все го че ты ре че лове ка, к оторы е м огу т вы строи ться в 1, 2 и 4 колон н ы . Е сли же д ля н е которы х N п отре бу е тся боле е 109 че лове к , то ре жи ссе р д олже н отказаться от зад у м ан н ой и д е и , так как н е обход и м ое чи сло у частн и к ов собрать н е возм ожн о. Т р ебу ется н ап и сать п рограм м у , к оторая ре ш ае т п ocтaвлeн н у ю п е ре д ре жи ссе ром зад ачу , т.е . д ля зад ан н ого коли че ства сп особов п острое н и я N оп ре д е ляе т м и н и м альн ое к оли че ство у частн и к ов ш оу . Т ехнические тр ебования : Им я вход н ого ф айла: INPUT.TXT Им я вы ход н ого ф айла: OUTPUT. ТХ Т О гран и че н и е п о вре м е н и те сти рован и я: 5 се к у н д п а к ажд ы й те ст. Фо р ма т вхо дны х да нны х: В ход н ой ф айл INPUT.TXT сод е ржи т од н о н ату ральн ое чи сло N (N blocks[j,(l+1) mod 3]) and (blocks[i,(k+2) mod 3] > blocks[j,(l+2) mod 3]) ) or ( (blocks[i,(k+1) mod 3] > blocks[j,(l+2) mod 3]) and (blocks[i,(k+2) mod 3] > blocks[j,(l+1) mod 3]) ); { О чи щае м м асси в used - д о н ачала строи те льства н е и сп ользован н и од и н блок } for j := 0 to N do used[j] := FALSE; { Н ачальн ая вы сота баш н и - н у ль} HCurr := 0; { Стави м п е рвы м блок "зе м ля" и вы зы вае м Recursion д ля ре ш е н и я те ста } writeln (f_out, 'Т е ст ', test, ': м акси м альн ая вы сота = ', Recursion (0,0)); { Пе ре ход к сле д у ю ще м у те сту } inc (test); end; until N = 0; { Заве рш е н и е работы } close (f_in); close (f_out); END. Зад ача "Ш оу " В п роце ссе разработки сце н ари я отк ры ти я оли м п и ад ы главн ы й ре жи ссе р зад у м алн е больш ое ш оу сп е ре строе н и е м е го у частн и к ов в разли чн ое чи сло к олон н ровн о N сп особам и . Д ля д ости же н и я н аи больш е го э ф ф е кта н у жн о
30
к он ф е ре н ци й д ля сту д е н тов, асп и ран тов, м олод ы х п ре п од авате ле й и сотру д н и к ов ву зов и н ау чн ы х орган и заци й» ф е д е ральн ой це ле вой п рограм м ы «Госу д арстве н н ая п од д е ржк а и н те граци и вы сш е го образован и я и ф у н д ам е н тальн ой н ау ки » в те че н и е д ву х ле т стан ови лся п обе д и те ле м гран тов п рограм м ы (в 2001 г. ре ги страци он н ы й н ом е р Р0054 и в 2002 г. ре ги страци он н ы й н ом е р Т 0140). Головн ой орган и заци е й п ри п рове д е н и и ш к олы –оли м п и ад ы вы сту п ал В орон е жск и й госу д арстве н н ы й у н и ве рси те т. Сп и сок сои сп олн и те ле й ш колы – оли м п и ад ы в 2002 г. н е скольк о и зм е н и лся и зн ачи те льн о расш и ри лся. Е сли в 2001 год у сои сп олн и те лям и бы ли В ы чи сли те льн ы й це н тр и м . А.А. Д ород н и цы н а РАН и В орон е жск и й госу д арстве н н ы й п е д агоги че ски й у н и ве рси те т (В ГПУ ), то в 2002 год у сои сп олн и те лям и п ом и м о В ГПУ являли сь В орон е жск ая госу д арстве н н ая те хн ологи че ская ак ад е м и я, Ф е д е ральн ы й н ау чн о–п рои звод стве н н ы й це н тр «В орон е жск и й Н ИИ связи », В орон е жск и й ре ги он альн ы й це н тр и н ф орм ати заци и вы сш е й ш к олы , це н тр п равовой и н ф орм ати ки М и н и сте рства ю сти ци и РФ п о В орон е жск ой области . Ре зу льтаты к ом ан д н ого заче та п о и тогам обои хту ров: 1 м е сто ПМ М В ГУ 2 м е сто СТИ М ИС и С 3 м е сто В ГТ А 4 м е сто Ф К Н В ГУ 5 м е сто м атф ак В ГУ 6 м е сто В ГТ У 7 м е сто В ГПУ М ак си м альн ое коли че ство баллов, которое м ожн о бы ло н абрать во втором ту ре в осн овн ой н ом и н аци и – 30 баллов. С ре зу льтатом 27 баллов п е рвое м е сто у ве ре н н о зан ял сту д е н т 3 к у рса ф ак у льте та ПМ М В ы ростк ов Д м и три й. О н вы и грал осн овн ой п ри з ш к олы – оли м п и ад ы – и м е н н у ю сти п е н д и ю к ом п ан и и «Ин ф орм связь-Че рн озе м ье ». О н п олу чи л так же сп е ци альн ы й п ри з ЗАО «Ре т», как отли чн и к у че бы , п ок азавш и й лу чш и й ре зу льтат. Н а 2-ое м е сто с ре зу льтатом 22 балла вы ш е л сту д е н т 2 к у рса ПМ М Проси н Се рге й, п обе д и те ль Пе рвой ш к олы – оли м п и ад ы . О н н агражд е н од н и м и з осн овн ы х п ри зов оли м п и ад ы – ци ф ровы м ф отоап п аратом от О О О «OCS-Ю г». В торок у рсн и к ф ак у льте та ПМ М
7
Си д оре н к о Стан и слав (ре зу льтат 22 балла) и сту д е н т СТ И М ИС и С М алаш е н ко О ле г (ре зу льтат 17 баллов), зан явш и е 3 м е сто, п олу чи ли м у зы к альн ы е к олон к и от ЗАО «Ре т». Че тве ртое м е сто п од е ли ли сту д е н т 3 к у рса ПМ М Гайд ай В и ктор (ре зу льтат 15 баллов), п олу чи вш и й от п ре зи д е н та ф и рм ы RelaxUs (СШ А) А.В . Пе ш к ова (вы п у скн и ка ПМ М ) кн и гу «Ethical Hacking» объе м ом 720 стран и ц и п яти к у рсн и к В ГТА, п остоян н ы й у частн и к оли м п и ад п о и н ф орм ати к е Затворн и цк и й Але ксан д р (ре зу льтат12 баллов), п олу чи вш и й н ау ш н и ки от«OCS-Ю г». Сре д и сту д е н ток м е ста расп ре д е ли ли сьсле д у ю щи м образом : Б ойче н к о Ан астаси я 3 к у рсПМ М – 1 м е сто; О рлова Але к сан д ра 3 к у рсПМ М – 2 м е сто; К озлова О льга С ТИ М ИС и С – 3 м е сто. Л у чш и м сре д и и н огород н и х сту д е н тов бы л М алаш е н ко О ле г (17 баллов), п е рвое м е сто сре д и сту д е н тов те хн и че ски х ву зов зан ял Затворн и цк и й Але ксан д р (12 баллов), сре д и сту д е н тов вое н н ы х ву зов н а п е рвое м е сто вы ш е лГарш и н Игорь(3 балла). Ре зу льтаты второго ту ра в осн овн ой н ом и н аци и : Ф .И.О . У ч.заве д е н и е Ф ак у льте т, Су м м а к у рс баллов В ы ростк ов Д м и три й В ГУ ПМ М 3 27 М алаш е н ко О ле г СТИ М ИСи С ПМ 2 17 В и к тор Гайд ай В ГУ ПМ М 3 15 Солом ати н Але ксе й В ГУ Ф КН 1 5,5 Л агу н ов Се рге й В ГУ М АТ 2 5 Л ари н Игорь В ГУ ПМ М 2 5 Погоре ле н к о В лад и м и р В ГУ ПМ М 2 5 Проси н Се рге й В ГУ ПМ М 2 22 Си д оре н к о Стан и слав В ГУ ПМ М 2 18 М у хое д ов Д м и три й В ГУ ПМ М 3 4 Гарш и н Игорь В В АИИ 2 3 Б арабаш В лад и м и р В ГУ ПМ М 2 5,5 Д е сятов Ан д ре й В ГУ Ф КН 2 8 Х орп як ов М и хаи л 1 Але н и н Се рге й В ГПУ 0,5
8
{ В озвращае м н айд е н н у ю м акси м альн у ю д ости жи м у ю вы соту } Recursion := HBest; end; BEGIN { Ин и ци али заци я ф айлов } assign (f_in, NAME_IN); assign (f_out, NAME_OUT); reset (f_in); rewrite (f_out); test := 1; repeat { В ы п олн яе м те сты п о оче ре д и } read (f_in, N); if N 0 then begin { Зап олн яе м м асси в blocks } { Д ля блок а "зе м ля" } for k := 0 to 2 do blocks[0,k] := 0; { Д ля все хостальн ы хблоков } for j := 1 to N do for k := 0 to 2 do read (f_in, blocks[j,k]); { По м асси ву blocks зап олн яе м м асси в build } { Д ля блок а "зе м ля" } for j := 1 to N do for k := 0 to 2 do for l := 0 to 2 do build[0,j,k,l] := TRUE; { Д ля все хостальн ы хблоков } for i := 1 to N do for j := 1 to N do for k := 0 to 2 do for l := 0 to 2 do
29
used : array [0..N_MAX] of Boolean; { К аки е блоки м ы у же и сп ользовали п ри строи те льстве баш н и } HCurr : LongInt; { Т е к у щая вы сота баш н и } { Зам е чан и е : зд е сьм ы у словн о ввод и м блок сн ом е ром 0 - э то "зе м ля", он и м е е т вы соту 0 и н а н е го м ожн о кластьвсё что у год н о } function Recursion (NewBlock, Side : Byte) : LongInt; { Ре к у рси вн ая ф у н к ци я. О п ре д е ляе т, к акой н аи больш е й вы соты баш н и м ожн о д ости чь, е сли п остави тьсе йчасн а н е ё блок сн ом е ром NewBlock так , что е го вы сотой бу д е т е го сторон а сн ом е ром Side } var HBest, HNew : LongInt; jj, kk : Byte; begin { Стави м н овы й блок } used[NewBlock] := TRUE; HCurr := HCurr + blocks[NewBlock,Side]; { Пробу е м п род олжатьстрои те льство - п е ре би рае м все д альн е йш и е п у ти "д остраи ван и я" баш н и и оп ре д е ляе м м ак си м альн у ю д ости жи м у ю вы соту HBest } HBest := HCurr; for jj := 1 to N do if not used[jj] then for kk := 0 to 2 do if build[NewBlock,jj,Side,kk] then begin HNew := Recursion(jj,kk); if HNew > HBest then HBest := HNew; end; { Сн и м ае м э тот блок } used[NewBlock] := FALSE; HCurr := HCurr - blocks[NewBlock,Side];
28
Ан д ре йчи к ов В аси ли й Б е ле н к о Але к сан д р Б ойче н к о Ан астаси я Б у лгаков Иван н и ков М ак си м К арп ю к Д м и три й К озлова О ля К оле сн и к Арте м К оржов Н и колай Л авск и й Н и к олай М атю ш е вск и й К и ри лл Н овак овски й Се рге й О рлова Але к сан д ра Полян ски й В лад и слав Прон и н Се рге й Се рге е в С е рге й Ск ри п че н ков Д е н и с Сок олов Се рге й Сорок и н Ан д ре й Сте ш е н ко Се рге й Тахи ров Ф и ру з Ти ще н к о Иван Ток арчу к Ром ан Че рн и ков В яче слав Ш у вае в Я рослав
В ГУ В ГУ В ГУ В ГУ В ГТУ В В АИИ СТИ М ИСи С В ГТ А В ГУ СТИ М ИСи С В ГУ В ГПУ В ГУ В ГУ В ГУ В ГПУ В ГУ В ГУ В ГУ В ГПУ В ГТ А СТИ М ГИСи С В ГПУ В ГТУ В ГТ А
ПМ М ПМ М ПМ М Ф КН Ф АЭМ
ПМ М ПМ М ПМ М ПМ М ПМ М ПМ М ПМ М ПМ М
ТУ Ф АЭМ
2 2 3 2 2 2 2 3 2 3 2 3 2 3 2 2 3 2 2 3 3 2 2 3
Ре зу льтаты второго ту ра в н ом и н аци и «Пе рвок у рсн и ки » Ф .И.О . У ч.заве д е н и е Ф ак у льте т Су м м а баллов Н и к олае ва Татьян а Е вге н ье вн а В ГУ ф и з 0,3 Д рап алю к В лад и м и р Се рге е ви ч В ГУ ф и з 5 Щ е рбак ов Е вге н и й Ан атолье ви ч В ГУ ПМ М 10 М ам е д ов Эм и н Ф арад О глы В ГУ ПМ М 7 Солом ати н Але ксе й Иван ови ч В ГУ Ф К Н 10
9
6 0,5 3,5 0,3 3 0,3 0,5 0,3 1,5 0,2 0,2 0,5 2 1 2 0,3 1 0,2 0,3 0,2 0,2 0,2 0,2 0,2 0,1
Ш али тк и н Ан д ре й В лад и м и рови ч Н е год яе в Але ксе й М и хайлови ч Ре ве н к о Але н а В але рье вн а К аш и ри н Але ксан д р Н и к олае ви ч Л ан цу зски й М и хаи лМ и хайлови ч Ц е п ляе в К он стан ти н Ю рье ви ч М ам он ов Д м и три й Се рге е ви ч Сви ри д ов Ан д ре й Але ксан д рови ч К отов Се рге й А ле к сан д рови ч
В ГУ В ГПУ В ГПУ В ГПУ В ГУ В ГУ В ГУ В ГУ В ГУ
ПМ М ф и зм ат ф и зм ат ф и зм ат физ Ф КН ПМ М физ ПМ М
5 5 0,3 1 0,3 2 7 5 0,5
Ре зу льтаты второго ту ра в се кци и п ри клад н ого п рограм м н ого обе сп е че н и я Ф .И.О . У ч.заве д е н и е Сум м а баллов Б е лоброд ск и й Ан д ре й В ГУ 14 Я н и н Але к се й В ГПУ 14 Павлов Л е он и д В ГУ 12,5 Н овак овски й Се рге й В ГПУ 12,5 К оржов Н и колай В ГУ 11 Л у щи ков Але ксе й В ГПУ 11 Савви н Паве л В ГТА 11 Сте ш е н ко С е рге й В ГПУ 10 Ф у рсова Ири н а В ГПУ 10 И Т О ГИ РЕ ГИ О Н А ЛЬ Н О Й СТ У Д Е Н ЧЕ СК О Й О ЛИ М П И А Д Ы П О П РО ГРА М М И РО В А Н И Ю , п освя щ енной 85-летию В ор онеж ского госу нивер ситета О р гком итетолимп иады П р едседатель- Зап рягае в Се рге й Але ксан д рови ч, п роф е ссор, п е рвы й п роре ктор В орон е жск ого госу н и ве рси те та; зам .п редседателя - Ш аш к и н А.И., п роф е ссор, д е кан ф ак у льте та п ри к лад н ой м ате м ати к и , и н ф орм ати ки и м е хан и к и ; Горбе н к о О .Д . – зав. каф е д рой М О ЭВ М В ГУ ;
10
33 83 27 0 П р имер вы хо дны х да нны х Тест 1: максимальная Тест 2: максимальная Тест 3: максимальная Тест 4: максимальная
высота высота высота высота
= = = =
40 21 28 342
Реш ение { Автор ре ш е н и я - Гай дай В иктор , сту д е н т3 к у рса ф ак у льте та ПМ М В ГУ , сп е ци али заци я: си сте м н ое п рограм м и рован и е , п обе д и те ль оли м п и ад ы . (ад ре сВ ГУ : г. В орон е ж, У н и ве рси те тская п лощад ь, 1) Ад ре сэ ле ктрон н ой п очты :
[email protected] } const NAME_IN = 'Input.txt'; NAME_OUT = 'Output.txt'; { Им е н а вход н ого и вы ход н ого ф айлов } N_MAX = 30; { М акси м альн ое коли че ство блок ов } var f_in, f_out : Text; { В ход н ой и вы ход н ой ф айлы } test : Byte; { Н ом е р те к у ще го те ста } N : Byte; { К оли че ство блок ов в те сте } i, j, k, l : Byte; blocks : array [0..N_MAX, 0..2] of LongInt; { Разм е ры блок ов; сторон ы п рон у м е рован ы от 0 д о 2 } build : array [0..N_MAX, 1..N_MAX, 0..2, 0..2] of Boolean; { "Совм е сти м ость" блоков: build[i,j,a,b] = TRUE, е сли н а i-й блок разре ш ае тся стави тьj-й блок так , что вы сотой п е рвого бу д е те го сторон а сн ом е ром a, а вы сотой второго - е го сторон а сн ом е ром b }
27
так , что е го д ва разм е ра оп ре д е ляли разм е р осн ован и я, и тре ти й разм е р являлся вы сотой. Зад аче й являлосьп острое н и е баш н и н аи больш е й вы соты , разм е щая од и н блок н ад д ру ги м . О д н ако кажд ы й вы ш е стоящи й блок д олже н расп олагаться (ле жать) н а блок е с больш и м осн ован и е м как п о ш и ри н е , так и п о д ли н е . В аш е й зад аче й являе тся п острое н и е так ой баш н и и з зад ан н ого н абор блок ов. В хо дны еи вы хо дны еда нны е В ход н ой ф айл INPUT.TXT сод е ржи т од и н и ли н е ск ольк о те стовы х п ри м е ров. Пе рвая строка сод е ржи т чи сло n оп ре д е ляю ще е к оли че ство разли чн ы хти п ов блок ов, n 1) then write(p[i],'*'); write('n'); if (i>1) then write('^', i); end; p[i]:=0; end;
Н ови че н к о Ан д ре й В але ре ви ч Пру д н и ков В лад и м и р Е вге н ье ви ч Б у лгаков ИгорьАле к сан д рови ч Х орп яков М и хаи лЮ рье ви ч Ж у к ова Ан н а Сахи н ов К он стан ти н В лад и м и рови ч Стре льн и кова Е ле н а Л обаче в Ру слан В лад и м и рови ч У су н ов Але ксан д р В и талье ви ч Зе н зи н а К се н и я Ан д ре е вн а Си тало Але к се й Ю рье ви ч М атве е в Н и колай Але к сан д рови ч О стан и н Д м и три й Але ксан д рови ч Павлов Л е он и д Д у д и н Але к се й Н и колае ви ч М и хайлов Н и ки та В лад и м и рови ч Потап ов Н и колай Сви ри д ов В и тали й К равче н к о В и тали й Се рге е ви ч Н осаре в М и хаи лАле ксан д рови ч Ж у к ова Ан н а Але к сан д ровн а Стре льн и кова Е ле н а
Б е лГТ У ПМ М Ф КН Ф КН ПМ М Б е лГТ У ПМ М Б е лГТ У ПМ М ПМ М Б е лГТ У ПМ М Ф КН ПМ М Б е лГТ У Б е лГТ У ПМ М ПМ М ПМ М Б е лГТ У ПМ М ПМ М
6 6 6 6 6 5 5 4 4 4 3 3 3 3 2 2 2 8 1 1 6 5
Н ом инац ия "И нф ор м атика- общ еобр азователь ная дисц ип лина" begin Ф ИО
writeLn('Програм м а #', pNumber); write('В ре м я=');
У че бн ое заве д е н и е
Су м м а баллов
writeLn; { После кажд ой п рограм м ы вы вод и тся чи стая строк а }
К арп ю к Д м и три й А ле к сан д рови ч К орш и к ов Але к се й В яче славови ч Че рн и е н ко В аси ли й В але рье ви ч Б ратков Д м и три й Иван ови ч Гарш и н Игорь
В В АИИ 12 Б е лГТ У 12 У к раи н а, Се в. Х М Т 11 В ИРЭ 6 В В АИИ 6
end;
К озлова О льга
СТ И М ИС и С
out(maxStn); for i:=maxStn-1 downto 0 do if (p[i]0) then begin write('+'); out(i); end;
24
13
6
Л авски й Н и к олай М и хайлови ч М алаш е н ко О ле г В але ри е ви ч Т и ще н к о Иван Я к у ш е в Але к сан д р Б ори сови ч Сахи н ов К он стан ти н В лад и м и рови ч Раш и тов Гу се в Б ори сЛ е он и д ови ч Глазкова Е ле н а Н и к олае вн а Паш е н це ва Е вге н и я Се рге е вн а Си тало Але к се й Ю рье ви ч Зотова Але ксан д ра Е вге н ье вн а Ин к огн и то М и хайлов Н и ки та В лад и м и рови ч М олод к и н Д м и три й Ш у вае в Я рослав Ж ок и н Ан д ре й Ю рье ви ч Пле ш кова О к сан а Игоре вн а Х од ос
СТИ М ИСи С 6 Стар.О ск . Т И6 СТИ М ИСи С 6 ге огр. ф ак 6 Б е лГТ У 5 СТИ М ИСи С 4 В ГТУ 4 В ГТ А 3 В ГТ А 3 Б е лГТ У 3 ге огр. 2 2 Б е лГТ У 2 В В АИИ 2 В ГТ А 2 В В АИ 1 ге огр.ф ак 1 СТИ М ИСи С 1
{ У ве ли чи вае тся сте п е н ьп оли н ом а. Зн ан и е е е обле гчае т вы вод , в частн ости вре м я работы п рограм м ы BEGIN END } if (maxStn<stn) then maxStn:=stn;
repeat s:=getWord; if (s='LOOP') then begin s:=getWord; if (s='n') then { Пе ре ход и м н а сле д у ю щи й у рове н ьвложе н н ости } looper(stn+1, mul) else { Е сли встре ти ли LOOP , то е го "те ло" бу д е т вы п олн яться раз, а су че том п ре д ы д у щи хвложе н н осте й
Н оминац ия "Ф изико-м атематические сп ец иаль ности" Ф ИО Л огу н ов Се рге й Cви ри д ов Ан д ре й Але ксан д рови ч
У че б. зав. м ат.ф ак . ф и з.ф ак
Су м м а баллов 11 6
Н оминац ия "Сту дентки" Ф ИО Гу рова М ари я В лад и м и м ровн а Си д орова М ари н а Б ойче н к о Ан астаси я Игоре вн а
У че б.зав. С у м м а баллов ПМ М 10 ПМ М 10 ПМ М 8
К озлова О льга Ж у к ова Ан н а Стре льн и кова Е ле н а
СТИ М ИСи С 6 ПМ М 6 ПМ М 5
LOOP ... LOOP (*...*=mul), то mul* раз } looper(stn, mul*strToInt(s)) end else if (s='OP') then {Изм е н яе м коэ ф ф и ци е н тсу че том } p[stn]:=p[stn]+mul*strToInt(getWord) else endd:=(s='END') or (eof); { В стре ти ли END - вы ход и м и з п роце д у ры } until endd;
14
23
Б он д аре н к о М ари я Але ксан д ровн а Зе н зи н а К се н и я Ан д ре е вн а Глазкова Е ле н а Н и к олае вн а Паш е н це ва Е вге н и я Се рге е вн а Зотова Але к сан д ра Е вге н ье вн а Пле ш кова О к сан а Игоре вн а
read(c); end;
getWord:=s; end;
би ол.-п очв.ф ак . 5 ПМ М 4 В ГТ А 3 В ГТ А 3 ге огр. ф ак 2 ге огр. ф ак 1
Н оминац ия "Е стественно-геогр аф ическиесп ец иаль ности" { stn - те к щая сте п е н ьвложе н н ости Ф ИО
mul - к оэ ф ф и ци е н т} { Рассм отри м к ак он и д олжн ы м е н яться п ри ре к у рси вн ом вы зове looper и как вли яю тн а коэ ф ф и ци е н тп ри n^stn.
p[i] - к оэ ф ф и ци е н т P(n) п ри n^stn.
У че бн ое заве д е н и е
В ахти н Се рге й Але к сан д рови ч Я к у ш е в Але к сан д р Б ори сови ч Б он д аре н к о М ари я Але к сан д ровн а Зотова Але ксан д ра Е вге н ье вн а Пле ш кова О к сан а Игоре вн а
Су м м а баллов
ге огр. ф ак . В ГУ 7 ге огр. ф ак . В ГУ 6 би ол.-п очв.ф ак .В ГУ 5 ге огр. ф ак . В ГУ 2 ге огр. ф ак . В ГУ 1
1. ... LOOP OP ... END OP ... Н ом инац ия "Т ехнические ивоенны е ву зы "
p[i]=p[i]+*(+... ) + 2. ... LOOP LOOP n LOOP OP END OP END ... END При вы чи сле н и и p[i+1] у же д олже н бу д е т у чи ты ваться : p[i+1]=p[i+1]+*(*+) Роль"н акоп ле н ого" м н ожи те ля и вы п олн яе т mul. }
procedure looper(stn, mul: UINT); var endd: boolean; s: string; begin endd:=false;
22
Ф ИО Ан д ри ян ов Д м и три й Иван ови ч Пу зан ок Але к се й Иван ови ч К арп ю к Д м и три й А ле к сан д рови ч К орш и к ов Але к се й В яче славови ч Че рн и е н ко В аси ли й В але рье ви ч
У че бн ое заве д е н и е Б е лГТ У Б е лГТ У В В АИИ Б е лГТ У У краи н а, Се ве род он е цки й Х М Т Б ратков Д м и три й Иван ови ч В ИРЭ Гарш и н Игорь В В АИИ Головк ов Але ксан д р В яче славови ч Б е лГТ У К озлова О . С Т И М ИСи С
6 6 6 6
Л авски й Н и к олай М и хайлови ч М алаш е н к о О ле г В але ри е ви ч Н ови че н к о Ан д ре й В але ре ви ч
6 6 6
С Т И М ИСи С С тар.О ск . Т И Б е лГТ У
15
Су м м а баллов 16 14 12 12 9
Т и ще н к о Иван Сахи н ов К он стан ти н В лад и м и рови ч Л обаче в Ру слан В лад и м и рови ч Раш и тов Гу се в Б ори сЛ е он и д ови ч Глазкова Е ле н а Н и к олае вн а Паш е н це ва Е вге н и я Се рге е вн а Си тало Але к се й Ю рье ви ч Д у д и н Але к се й Н и колае ви ч М и хайлов Н и ки та В лад и м и рови ч М олод к и н Д м и три й Ш у вае в Я рослав Ж ок и н Ан д ре й Ю рье ви ч Н осаре в М и хаи лАле ксан д рови ч Х од ос
СТИ М ИСи С Б е лГТ У Б е лГТ У СТИ М ИСи С В ГТУ В ГТ А В ГТ А Б е лГТ У Б е лГТ У Б е лГТ У В В АИИ В ГТ А В В АИ Б е лГТ У СТИ М ИСи С
6 5 4 4 4 3 3 3 2 2 2 2 1 1 1
function strToInt(s: string): UINT; var i, x, ff: UINT; begin x:=0; ff:=1; for i:=length(s) downto 1 do begin x:=x+(ord(s[i])-ze)*ff; ff:=ff*10; end; strToInt:=x; end;
Н оминац ия "В Г У - 85 лет" Ф ИО
Ф ак у льте т Су м м а баллов
{ Чте н и е сле д у ю ще го оп е ратора и з ф айла } function getWord: string;
М у хое д ов Д м и три й Гайд ай В и к тор Але ксан д рови ч М ам е д ов Эм и н Ф архад оглы Проси н Се рге й Сорок и н Ан д ре й К оржов Н и колай Е вге н ье ви ч Л ари н Игорь
ПМ ПМ ПМ ПМ ПМ ПМ ПМ
М М М М М М М
21 20 17 16 12 12 11
Л огу н ов Се рге й Т у зов Се рге й Щ е рбак ов Е вге н и й Ан атолье ви ч Гу рова М ари я В лад и м и м ровн а Си д орова М ари н а Пе тров К он стан ти н В лад и м и рови ч Б арабаш В лад и м и р В яче славови ч
М ат.ф ак . ПМ М ПМ М ПМ М ПМ М ПМ М ПМ М
11 10 10 10 10 9 8
16
var i: integer; s: string; c: char; begin
repeat read(c); until (c in ss) or (eof);
s:=''; while (c in ss) do begin s:=s+c;
21
Реш ение Автор ре ш е н и я - М у хоедов Д митр ий , сту д . 3 к у рса каф е д ры М О ЭВ М ф ак у льте та ПМ М , абсолю тн ы й п обе д и те льоли м п и ад ы . { Пре д п олагае тся, что в зад авае м ой п рограм м е н е т ош и бок }
type UINT = 0..maxLongInt; TArr = array[0..10] of UINT; { deg P(n)==10 => м ак си м у м 11 к оэ ф ф и ци е н тов }
const inf = 'input.txt'; outf = 'output.txt';
{ В се остальн ы е си м волы в п рограм м е п оявляться н е м огу т} ss : set of char = ['B','E','G','I','N','O','P','L','D', 'n', '0'..'9'];
ze = ord('0');
var p : TArr; { М асси в, в к отором бу д е м хран и тьк оэ ф ф и ци е н ты п оли н ом а } maxStn: UINT; { М акси м альн ая сте п е н ьп оли н ом а } n, n1: UINT;
М атю ш е вск и й К и ри л Си д оре н ко С.В . Ф и рсов М акси м Ю рье ви ч Б ойче н к о Ан астаси я Игоре вн а Сви ри д ов В и тали й Погоре ле н к о В лад и м и р Ск ри п че н ков Д е н и с Я стре бО ле г Игоре ви ч В ахти н Се рге й Але ксан д рови ч Cви ри д ов Ан д ре й Але к сан д рови ч Б е ле н к о Паве лВ и к торови ч Год у н ов Д е н и сВ и талье ви ч Л е п е н д и н А.В . Пру д н и ков В лад и м и р Е вге н ье ви ч Я к у ш е в Але ксан д р Б ори сови ч Б у лгак ов ИгорьА ле к сан д рови ч Х орп яков М и хаи лЮ рье ви ч Ж у к ова Ан н а Але к сан д ровн а Стре льн и кова Е ле н а Б он д аре н к о М ари я Але ксан д ровн а Стре льн и к ова Е ле н а У су н ов Але ксан д р В и талье ви ч Зе н зи н а К се н и я Ан д ре е вн а
ПМ М 8 ПМ М 8 ПМ М 8 ПМ М 8 ПМ М 8 ПМ М 7 ПМ М 7 ПМ М 7 ге огр.ф ак . 7 Ф и зф ак 6 Ф КН 6 ПМ М 6 ПМ М 6 ПМ М 6 ге огр. ф ак 6 Ф КН 6 Ф КН 6 ПМ М 6 ПМ М 5 би ол.-п очв.ф ак . 5 ПМ М 5 ПМ М 4 ПМ М 4
М атве е в Н и колай Але к сан д рови ч О стан и н Д м и три й Але ксан д рови ч Павлов Л е он и д Зотова Але к сан д ра Е вге н ье вн а
ПМ М Ф КН ПМ М ге огр.ф ак .
Потап ов Н и колай К равче н к о В и тали й Се рге е ви ч Пле ш кова О к сан а Игоре вн а
ПМ М 2 ПМ М 1 ге огр. ф ак 1
{ Пре образован и е сод е ржи м ого строк и в н е отри цате льн ое це лое чи сло }
20
17
3 3 3 2
И збр анны е задачии р еш ения Зад ача «Счи тае м сложн ость» Ин стру м е н ты д ля ан али за сложн ости алгори тм ов оче н ь важн ы п ри разработк е э ф ф е к ти вн ы хп рограм м . Алгори тм , к оторы й работае т ли н е йн ое вре м я, обы чн о н ам н ого бы стре е , че м алгори тм и сп ользу ю щи й к вад рати чн ое вре м я ре ш е н и я д ля той же зад ачи и е го и сп ользован и е к он е чн о п ре д п очти те льн е й. О бы чн о, од н и м и з возм ожн ы х м е тод ов оп ре д е ле н и я вре м е н и работы алгори тм а, являе тся н ахожд е н и е зави си м ости вре м е н и работы алгори тм а от разм е ра n, к оторы й м оже т оп ре д е лять к оли че ство хран и м ы х объе ктов, к оли че ство точе к в п оли гон е и т.д . Эту н е п росту ю зад ачу п од сче та хоте лосьбы автом ати зи роватьд ля п росте йш и хп рограм м , т.к . д ля сложн ы х э то н е вп олн е возм ожн о. Н аш и п рограм м ы бу д у т оче н ь п росты м и , и и х п острое н и е бу д е топ ре д е ле н о сле д у ю щи м и п рави лам и . • • •
< П р о гр а мма > ::= "BEGIN" < Списо ко пер а т о р о в > "END" < Списо ко пер а т о р о в > ::= < О пер а т о р > | < О пер а т о р > < Списо к о пер а т о р о в > < О пер а т о р > ::= < LOOP- О пер а т о р > | < OP- О пер а т о р >
•
< LOOP- О пер а т о р > ::= < LOOP-За го ло во к> < Списо к о пер а т о р о в > "END"
•
< LOOP-За го ло во к> ::= "LOOP" < число > | "LOOP n"
• < OP- О пер а т о р > ::= "OP" < число > В ре м я вы п олн е н и я п рограм м ы оп ре д е ляе тся сле д у ю щи м образом : вы п олн е н и е кажд ого OP-оп е ратора п рои сход и т столько раз, скольк о у к азан о е го п арам е тром . Сп и сок оп е раторов заклю че н н ы й в ци к л LOOP стольк о раз, ск ольк о у казан о п арам е тром ци к ла, т.е . ли бо у казан н ой к он стан той и ли n раз. В ре м я вы п олн е н и я сп и ск а оп е раторов равн о су м м е вре м е н д ля к ажд ого оп е ратора, вход яще го в сп и сок . О бще е вре м я вы п олн е н и я обы чн о зави си т от n. В хо дны еда нны е В ход н ой ф айл(и ли ввод склави ату ры ) н ачи н ае тся су казан и я н а отд е льн ой строк е к оли че ства п рограм м k, к оторы е бу д у т вве д е н ы в соотве тстви и с у к азан н ы м и п рави лам и . Пробе лы и си м волы кон ца строки м огу тп ояви тся в
18
лю бом м е сте п рограм м ы , н о н е вн у три клю че вы х слов и чи словы х п арам е тров. М акси м альн ая глу би н а вложе н н ости оп е раторов LOOP равн а 10. Вы хо дны еда нны е Д ля кажд ой п рограм м ы вы вод и тся е е н ом е р, как п ок азан о в п ри м е ре . Зате м вы вод и тся вре м я е е работы в ви д е п оли н ом а, сте п е н ь к оторого н е больш е че м 10. Пе чатьп оли н ом а д олжн а бы тьорган и зован а п ри вы чн ы м сп особом в ф орм е ``Время = a*n^10+b*n^9+ . . . +i*n^2+ j*n+k'', п ри э том слагае м ы е с н у ле вы м и к оэ ф ф и ци е н там и п роп у скаю тся, а м н ожи те ль 1 н е вы вод и тся. После к ажд ой п рограм м ы вы вод и тся чи стая строка. П р имер вхо дны х да нны х 2 BEGIN LOOP n OP 4 LOOP 3 LOOP n OP 1 END OP 2 END OP 1 END OP 17 END BEGIN OP 1997 LOOP n LOOP n OP 1 END END END П р имер вы хо дны х да нны х Программа #1 Время = 3*n^2+11^n+17 Программа #2 Время = n^2+1997
19