М И Н И СТ Е РСТ В О О Б РА ЗО В А Н И Я И Н А У К И РО ССИ Й СК О Й Ф Е Д Е РА Ц И И В О РО Н Е Ж СК И Й ГО СУ Д А РСТ В Е Н Н ЫЙ У Н И В Е РСИ Т Е Т
О .Ф .У скова О .Д .Г ор бенко
О ЛИ М П И А Д Н ЫЕ ЗА Д А ЧИ П О П РО ГРА М М И РО В А Н И Ю . ЛУ ЧШ И Е РЕ Ш Е Н И Я Часть 9 У чебное издание
В О РО Н Е Ж – 2004
Б Б К 32.97 У Д К 681.3 А вторы : д оц. О .Ф .У ск ова, д оц. О .Д .Горбе н к о,
О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю . Л у чш и е ре ш е н и я. В д е вяти частях. Часть 9.: У че бн ое и зд ан и е / О .Ф .У ск ова, О .Д .Горбе н к о – В орон е ж: В орон е жски йгосу д арстве н н ы й у н и ве рси те т, 2004. – с.68
О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю . Л у чш и е ре ш е н и я. В д е вяти частях. Часть 9.: У че бн ое и зд ан и е / О .Ф .У ск ова, О .Д .Горбе н ко, – В орон е ж: В орон е жск и йгосу д арстве н н ы й у н и ве рси те т, 2004. – с.68
Сборн и к составле н п о м ате ри алам Тре тье й откры той ре ги он альн ой сту д е н че ской ш к олы -оли м п и ад ы п о п рограм м и рован и ю и ком п ью те рн ом у м од е ли рован и ю .
Б Б К 32.97 У Д К 681.3 П е чатае тся п о ре к ом е н д аци и ре д акци он н о-и зд ате льск ого сове та фак у льте та п ри клад н ойм ате м ати ки , и н форм ати ки и м е хан и ки В орон е жск ого госу н и ве рси те та Ре це н зе н т– к ан д и д атфи зи к о-м ате м ати че ски хн ау к , д оце н т Л .С.Ми ловск ая ISBN 5-815-047-0 © В орон е жск и й у н и ве рси те т © О .Ф .У ск ова, О .Д .Горбе н ко
67
П РЕ Д И СЛО В И Е
repeat if (x+k>=m) and (x-k<=m) and (y+k>=n) and (y-k<=n) then r:=r+1; if x>m then x:=x-k else x:=x+k; if y>n then y:=y-k else y:=y+k; k:=k div 2; until k=1; if (x+k>=m) and (x-k<=m) and (y+k>=n) and (y-k<=n) then r:=r+1; writeln(f2,r);
И з д ание
п од г от овле но п о м ат е риалам Тре т ье й от к ры т ой
ре гион а л ьн ой с т уде н че с кой ш кол ы -ол им п иа ды по п р ог р а м м ир ова н ию и ком п ью т е р н ом у м оде л ир ова н ию , п ровод имой в рам к ах Ф е д е ральной це ле вой п рог раммы «И нт е г рация наук и и вы сш е г о образ ования» (п рое к т Т3112/2072). О но може т бы т ь т ак же п оле з но ш к ольник ам ст арш их к лассов, ст уд е нт ам и учит е лям информ ат ик и обще образ оват е льны х и п рофильны х уче бны х з аве д е ний. Головной орг аниз ацие й п рое к т а являе т ся Вороне жск ий г осуниве рсит е т . Соисп олнит е ли – Вороне жск ий г осуд арст ве нны й п е д аг ог иче ск ий униве рсит е т , Вороне жск ий ре г иональны й це нт р Ф е д е рации И нт е рне т О браз ования. В п е рвой част и рассмат ривались з ад ачи п ре д ш е ст вовавш их олим п иад п о информ ат ик е раз личног о уровня (фак ульт е т ск их, вуз овск их, ме жвуз овск их, ре г иональны х, фе д е ральны х). Не к от оры е з ад ачи п риве д е ны с ре ш е ниями, в основном раз работ анны ми ст уд е нт ам и фак ульт е т а п рик лад ной м ат е м ат ик и и м е ханик и Вороне жск ог о униве рсит е т а, ст авш ими в свое вре мя п риз е рами
readln(f1,d); s:=copy(d,1,pos(' ',d)-1); val(s,k,i); writeln(k); delete(d,1,pos(' ',d)); s:=copy(d,1,pos(' ',d)-1); val(s,m,i); writeln(m); delete(d,1,pos(' ',d));
эт их олим п иад . Во вт орой част и п ом им о з ад ач, п ре д ложе нны х на олим п иад ах раз личног о уровня, бы ли п ре д ст авле ны м ат е риалы
val(d,n,i); writeln(n);
п е рвог о (з аочног о) т ура ш к олы -олим п иад ы . В т ре т ье й част и п ре д ст авле ны мат е риалы Вт орой от к ры т ой ре г иональной ст уд е нче ск ой ш к олы - олимп иад ы п о п рог раммированию и к омп ьют е рному м од е лированию. Че т ве рт ая част ь д оп олняе т их анализ ом ре з ульт ат ов п е рвог о т ура и лучш им и ре ш е ниями п обе д ит е ле й п е рвог о т ура. В п ят ой част и п ре д ст авле ны ре з ульт ат ы вт орог о т ура Вт орой от к ры т ой ре г иональной ст уд е нче ск ой ш к олы -олим п иад ы по п рог рамм ированию и к омп ьют е рному м од е лированию и из бранны е ре ш е ния з ад ач. В ш е ст ой част и п од ве д е ны ит ог и Ре г иональной ст уд е нче ск ой инт е рне т -олим п иад ы п о п рог рамм ированию, п освяще нной 85-ле т ию Вороне жск ог о г осуниве рсит е т а. В се д ьм ой част и бы ли
until k=0; close(f2); end.
п ре д ст авле ны 66
м ат е риалы
з аочног о т ура Тре т ье й от к ры т ой 3
ре г иональной ст уд е нче ск ой ш к олы -олимп иад ы п о п рог рамм ированию и к омп ьют е рному м од е лированию. В восьм ой част и рассм ат ривались основны е ит ог и, м ат е риалы и лучш ие ре ш е ния п е рвой Все российск ой ст уд е нче ск ой олимп иад ы «И нформационное м од е лирование и совре м е нны е к ом п ьют е рны е т е хнолог ии», к от орая п ровод илась на баз е Вороне жск ог о униве рсит е т а в се нт ябре -ноябре 2003 г од а (п рик аз ы М инобраз ования № 1187 от 25.03.2003 г . и № 2730 от 25.06.2003 г .) Наст оящая д е вят ая част ь сост авле на п о м ат е риалам п е рвог о и вт орог о т уров Тре т ье й от к ры т ой ре г иональной ст уд е нче ск ой ш к олы -олимп иад ы п о п рог рамм ированию и к омп ьют е рному м од е лированию.
10. В се квадр аты Сту д е н т 2 к у рса В орон е жск ого вое н н ого и н сти ту та рад и оэле ктрон и ки А лекса ндр З у ев п ре д ложи лсвой вари ан тре ш е н и я этой зад ачи program zad1; uses crt; var f1,f2: text; m,x,n,y,k,r,i:integer; d,s:string;
begin Резу л ьтаты 2 ту р аПер вой откр ы той р егионал ьной сту денческой ш кол ы -ол им п иады п оп р ог р ам м ир ованию икомп ью терному модел ир ованию О тк ры тая ре ги он альн ая сту д е н че ск ая ш к ола-оли м п и ад а по п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю п ровод и тся в рам к ах Ф е д е ральн ой це ле вой п рограм м ы "И н те граци я н ау ки и образован и я", н ап равле н и е 2.7 "Прове д е н и е н ау чн ы х к он к у рсов, ш к ол и к он фе ре н ци й д ля сту д е н тов, асп и ран тов, м олод ы х п ре п од авате ле й и сотру д н и к ов ву зов и н ау чн ы х орган и заци й ", п рое к т Т0140. Головн ая орган и заци я п рое к та В орон е жски йгосу д арстве н н ы й у н и ве рси те т.
clrscr; assign(f1,'input.txt'); reset(f1); assign(f2,'output.txt'); readln(f1,d); rewrite(f2); s:=copy(d,1,pos(' ',d)-1); val(s,k,i); writeln(k); delete(d,1,pos(' ',d)); s:=copy(d,1,pos(' ',d)-1);
Ф .И .О . у частников К олбе ш ки н Д м и три й М и хайлови ч П роси н Се рге й А ле ксан д рови ч Гайд ай В и к тор Н е к расов Стан и слав Ю рье ви ч
Б ал л ы 11 10 8 8
М у хое д ов Д м и три й Се рге е ви ч Глад ы ш е в О ле г В и кторови ч
7 6,5
В ы ростк ов Д м и три й А н д ре е ви ч Затворн и цк и й А ле к сан д р П е трови ч К ли н ски хА н тон А ле ксан д рови ч
6 6 6
4
val(s,m,i); writeln(m); delete(d,1,pos(' ',d)); val(d,n,i); writeln(n); repeat x:=1024; y:=1024; r:=0; 65
for i:=1 to 10 do begin Read(F,ch); case ch[1] of '2'..'9':val(ch[1],y,code); 'T':y:=10; 'J':y:=11; 'Q':y:=12; 'K':y:=13; 'A':y:=14; end; case ch[2] of 'C':x:=1; 'D':x:=2; 'H':x:=3; 'S':x:=4; end; if (i<=5) then A[y,x]:=1 else A[y,x]:=i-4; end; if straightflash then wr('straightflash') else if fourofakind then wr('fourofakind') else if fullhouse then wr('fullhouse') else if flush then wr('flush') else if straight then wr('straight') else if threeofakind then wr('threeofakind') else if twopairs then wr('twopairs') else if onepair then wr('onepair'); end; Close(F); End.
64
Гром ов Стан и слав А н д ре е ви ч К орн и е н к о Стан и слав А льбе ртови ч Ш и ряе в Ми хаи лМ и хаи лови ч Б у рн ае в К он стан ти н Е вге н и е ви ч Н ови к ов А ле к сан д р В аси лье ви ч М и н ак ов Се рге й Х ау и М ари я А броси м ов А ле к сан д р И сае ва Татьян а Ми хайловн а К атов Ми хаи лВ и кторови ч М авле тк у лов А н д ре й Л е он и д ови ч Ти щ е н к о И ван И ван ови ч Б е лоброд ск и й А н д ре й А н д ре е ви ч В ахти н Се рге й А ле ксан д рови ч В орон и н а Татьян а И ван овн а Гаш к ов М акси м А ле к сан д рови ч Гри д н е в А ле к сан д р Н и колае ви ч Д е сятов А ле к се й Д м и три е ви ч Д ок у чав М и хаи лЮ рье ви ч Заколод яжн ы й Ю ри й В и кторови ч И ван ов О ле г О ле гови ч К озлов Ю ри й Стан и славови ч К озлова О льга В и к торовн а К оле сн и ков М акси м А ле ксан д рови ч Л е сн и ков Д м и три й В яче славови ч
5 5 5 4 4 4 3 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1
М алаш е н к о О ле г
1
П ле ш кова О к сан а И горе вн а П рон и н Се рге й Се рге е ви ч Ры ш к ов Е вге н и й В але рье ви ч Се м е рн и н Се рге й П авлови ч Су ве йкэ Е вге н и йГе орги е ви ч Ту зов Се рге й Чу лю к ов А ле к се й В лад и м и рови ч
1 1 1 1 1 1 1
Я к у н и н М акси м Се рге е ви ч Б е лоу сова Ю ли я В лад и м и ровн а
1 0,5
5
В озн ю к Д м и три йЛ е он и д ови ч Д ом бровск ая О льга В але рье вн а И ван н и ков М ак си м И горе ви ч И ван ов А н д ре й В аси лье ви ч К ад и м ов О ле г Н ари м ан ови ч К арп ю к Д м и три й А ле к сан д рови ч К ом ова А н н а А н атолье вн а К у ри н М и хаи лСе рге е ви ч К у роп атки н А н д ре й Се рге е ви ч Л огу н ов Се рге й И ван ови ч М и хали н Ром ан В але рье ви ч Н е у м ы вак и н Се рге й Се рге е ви ч О к у н е в А ле ксан д р И ван ови ч П е ров Се рге й Н и к олае ви ч Саве лье в К он стан ти н Эд у ард ови ч Х ау стов Д м и три й В аси лье ви ч Н оминац ия "П Е РВ О К У РСН И К И " Ф ИО К оржов Н и колай Е вге н ье ви ч Д е сятов А н д ре йД м и три е ви ч Си д оре н к о Стан и слав Глу хов А рте м Л е он и д ови ч Л огу н ов Се рге й И ван ови ч
0,5 0,5 0,2 0,2 0,2 0,5 0,2 0,5 0,5 0,2 0,2 0,2 0,5 0,2 0,2 0,2 ВУ З В ГУ В ГУ В ГУ В ГУ В ГУ
for j:=2 to 14 do begin l:=0; for i:=1 to 4 do if (A[j,i]<>0) then inc(l); if l=2 then y1:=j; end; if y1<>0 then begin count11:=2; for l:=1 to 4 do if (A[y1,1]=count11) or (A[y1,2]=count11) or (A[y1,3]=count11) or (A[y1,4]=count11) then inc(count11); count12:=1; for l:=1 to 4 do if A[y1,l]>count12 then count12:=A[y1,l]; if count11-1=count12 then onepair:=true else onepair:=false; end else onepair:=false;
Б аллы 13 12 10 8 7
П и саре вски й Се рге йЮ рье ви ч А н д ре йчи к ов В аси ли й А н д ре е ви ч К оле сн и к А рте м В але рье ви ч Л ари н И горьА ле к сан д рови ч
В ГТУ В ГУ В ГТА В ГУ
6 5 5 5
Х лоп к ов А н д ре й Д у рак ов Ром ан А ле к сан д рови ч А рхи п ова И ри н а Н и к олае вн а Б е зрод н ы й А ле ксе й Н и к олае ви ч В ощ и н ская Е ле н а Се рге е вн а Л у чки н А ле к се й Ю рье ви ч Род и он ов Д м и три й А ле к сан д рови ч
В ГУ В ГП У В ГУ В И РЭ В ГУ В ГУ В ГУ
5 3 1 0 0 0 0
end; procedure wr(s:string); var f2:text; begin assign(f2,'output.txt'); rewrite(f2); writeln(f2,s); close(f2); end; Begin ClrScr; Assign(F,'input.txt'); FillChar(A,SizeOf(A),0); Reset(F); while not eof(f) do begin
6
63
y1,y2:byte; Ok:boolean; begin y1:=0;y2:=0; for j:=2 to 14 do begin l:=0; for i:=1 to 4 do if (A[j,i]<>0) then inc(l); if l=2 then y1:=j else if (l=2) and (j<>y1) then y2:=j; end;
И тог иВ тор ой откр ы той р ег ионал ьной сту денческой ш кол ы – ол имп иады п оп р ог р аммир ованию икомп ью тер ном у м одел ир ованию П рое кт «О тк ры тая ре ги он альн ая сту д е н че ск ая ш кола–оли м п и ад а п о п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю », разработан н ы й в рам ках н ап равле н и я 2.7 «Прове д е н и е н ау чн ы х к он к у рсов, ш к ол и к он фе ре н ци й д ля сту д е н тов, асп и ран тов, м олод ы х п ре п од авате ле й и сотру д н и ков ву зов и н ау чн ы хорган и заци й» фе д е ральн ой це ле вой п рограм м ы «Госу д арстве н н ая п од д е ржка и н те граци и вы сш е го образован и я и фу н д ам е н тальн ой н ау ки » в те че н и е д ву хле тстан ови лся п обе д и те ле м гран тов п рограм м ы (в 2001 г. ре ги страци он н ы й н ом е р Р0054 и в 2002 г. ре ги страци он н ы й н ом е р Т0140). Головн ой орган и заци е й п ри п рове д е н и и
if (y1<>0) and (y2<>0) then begin count11:=2; for l:=1 to 4 do if (A[y1,1]=count11) or (A[y1,2]=count11) or (A[y1,3]=count11) or (A[y1,4]=count11) then inc(count11); count12:=1; for l:=1 to 4 do if A[y1,l]>count12 then count12:=A[y1,l]; count21:=2; for l:=1 to 4 do if (A[y2,1]=count21) or (A[y2,2]=count21) or (A[y2,3]=count21) or (A[y2,4]=count21) then inc(count21); count22:=1; for l:=1 to 4 do if A[y2,l]>count22 then count22:=A[y2,l]; if (count11-1=count12) and (count21-1=count22) then twopairs:=true else twopairs:=false;
ш к олы –оли м п и ад ы вы сту п ал В орон е жск и й госу д арстве н н ы й у н и ве рси те т. Сп и сок сои сп олн и те ле й ш к олы – оли м п и ад ы в 2002 г. н е ск ольк о и зм е н и лся и зн ачи те льн о расш и ри лся. Е сли в 2001 год у сои сп олн и те лям и бы ли В ы чи сли те льн ы й це н тр и м . А .А . Д ород н и цы н а РА Н и В орон е жски й госу д арстве н н ы й п е д агоги че ск и й у н и ве рси те т (В ГП У ), то в 2002 год у сои сп олн и те лям и п ом и м о В ГП У являли сь В орон е жская госу д арстве н н ая те хн ологи че ск ая ак ад е м и я, Ф е д е ральн ы й н ау чн о–п рои звод стве н н ы й це н тр «В орон е жски й Н И И связи », В орон е жски й ре ги он альн ы й це н тр и н форм ати заци и вы сш е й ш к олы , це н тр п равовойи н форм ати к и М и н и сте рства ю сти ци и РФ п о В орон е жск ойобласти . Ре зу льтаты к ом ан д н ого заче та п о и тогам обои хту ров: 1 м е сто П М М В ГУ 2 м е сто СТИ М И С и С 3 м е сто
end else twopairs:=false; end; function onepair:boolean; var j,i,l,count11,count12,count21,count22:byte; y1,y2:byte; Ok:boolean;
В ГТА
4 м е сто Ф К Н В ГУ 5 м е сто м атфак В ГУ 6 м е сто В ГТУ 7 м е сто В ГП У Макси м альн ое коли че ство баллов, которое м ожн о бы ло н абрать во втором ту ре в осн овн ой н ом и н аци и – 30 баллов. С ре зу льтатом 27 баллов п е рвое м е сто у ве ре н н о зан ялсту д е н т3 к у рса фак у льте та П М М В ы ростков Д м и три й. О н вы и грал осн овн ой п ри з ш к олы – оли м п и ад ы – и м е н н у ю сти п е н д и ю к ом п ан и и «И н форм связь-Че рн озе м ье ». О н п олу чи л также сп е ци альн ы й п ри з
begin y1:=0; 62
7
ЗА О «Рет», к ак отли чн и к у че бы , п оказавш и й лу чш и й ре зу льтат. Н а 2-ое м е сто с ре зу льтатом 22 балла вы ш е л сту д е н т 2 к у рса П М М П роси н Се рге й, п обе д и те ль П е рвой ш к олы – оли м п и ад ы . О н н агражд е н од н и м и з осн овн ы х п ри зов оли м п и ад ы – ци фровы м фотоап п аратом от О О О «OCS-Ю г». В торок у рсн и к фак у льте та П М М Си д оре н ко Стан и слав (ре зу льтат 22 балла) и сту д е н т СТИ М И С и С Малаш е н ко О ле г (ре зу льтат 17 баллов), зан явш и е 3 м е сто, п олу чи ли м у зы кальн ы е к олон к и от ЗА О «Ре т». Че тве ртое м е сто п од е ли ли сту д е н т 3 к у рса П М М Гайд ай В и к тор (ре зу льтат 15 баллов), п олу чи вш и й от п ре зи д е н та фи рм ы RelaxUs (СШ А ) А .В . П е ш кова (вы п у скн и ка П М М) кн и гу «Ethical Hacking» объе м ом 720 стран и ц и п яти к у рсн и к В ГТА , п остоян н ы й у частн и к оли м п и ад п о и н форм ати ке Затворн и цки й А ле к сан д р (ре зу льтат 12 баллов), п олу чи вш и й н ау ш н и к и от «OCS-Ю г». Сре д и сту д е н ток м е ста расп ре д е ли ли сьсле д у ю щ и м образом : Б ойче н к о А н астаси я 3 к у рс П М М – 1 м е сто; О рлова А ле к сан д ра 3 к у рс П М М – 2 м е сто; К озлова О льга СТИ М И С и С – 3 м е сто. Л у чш и м сре д и и н огород н и х сту д е н тов бы л М алаш е н к о О ле г (17 баллов), п е рвое м е сто сре д и сту д е н тов те хн и че ск и х ву зов зан ял Затворн и цк и й А ле к сан д р (12 баллов), сре д и сту д е н тов вое н н ы х ву зов н а п е рвое м е сто вы ш е лГарш и н И горь(3 балла). Ре зу льтаты второго ту ра в осн овн ойн ом и н аци и : Ф .И .О . У ч.заве д е н и е Ф ак у льте т, Су м м а к у рс баллов В ы ростк ов Д м и три й В ГУ П ММ 3 27 В и ктор Гайд ай
В ГУ
ПММ
3
15
Солом ати н А ле ксе й Л агу н ов Се рге й Л ари н И горь П огоре ле н ко В лад и м и р П роси н Се рге й Си д оре н ко Стан и слав М у хое д ов Д м и три й
В ГУ В ГУ В ГУ В ГУ В ГУ В ГУ В ГУ
Ф КН МА Т ПММ ПММ ПММ ПММ ПММ
1 2 2 2 2 2 3
5,5 5 5 5 22 18 4
Гарш и н И горь Затворн и цки й
ВВА И И В ГТА
2 5
3 12
8
end; function straight:boolean; Var Ok:boolean; i,S,j:byte; begin i:=2; while (not Ok) and (i<=10) do begin S:=0; for j:=1 to 4 do S:=S+A[i,j]+A[i+1,j]+A[i+2,j]+A[i+3,j]+A[i+4,j]; if S>=4 then begin ok:=true; straight:=true; end; end; if ok then straight:=true else straight:=false; end; function threeofakind:boolean; Var Ok:boolean; i,S,j:byte; begin i:=2; while (not Ok) and (i<=10) do begin S:=0; for j:=1 to 4 do S:=S+A[i,j]+A[i+1,j]+A[i+2,j]+A[i+3,j]+A[i+4,j]; if S>=3 then begin ok:=true; threeofakind:=true; end; end; if ok then threeofakind:=true else threeofakind:=false; end; function twopairs:boolean; var j,i,l,count11,count12,count21,count22:byte; 61
l:=0; for i:=1 to 4 do if (A[j,i]<>0) then inc(l); if l=3 then y1:=j else if l=2 then y2:=j; end; if (y1<>0) and (y2<>0) then begin count11:=2; for l:=1 to 4 do if (A[y1,1]=count11) or (A[y1,2]=count11) or (A[y1,3]=count11) or (A[y1,4]=count11) then inc(count11); count12:=1; for l:=1 to 4 do if A[y1,l]>count12 then count12:=A[y1,l]; count21:=2; for l:=1 to 4 do if (A[y2,1]=count21) or (A[y2,2]=count21) or (A[y2,3]=count21) or (A[y2,4]=count21) then inc(count21); count22:=1; for l:=1 to 4 do if A[y2,l]>count22 then count22:=A[y2,l]; if (count11-1=count12) and (count21-1=count22) then fullhouse:=true else fullhouse:=false; end else fullhouse:=false; end; function flush:boolean; Var Ok:boolean; i,S,j:byte; begin i:=2; while (not Ok) and (i<=10) do
Б арабаш В лад и м и р Д е сятов А н д ре й Х орп яков М и хаи л А ле н и н Се рге й А н д ре йчи к ов В аси ли й Б е ле н к о А ле ксан д р Б ойче н ко А н астаси я Б у лгак ов И ван н и к ов М акси м К арп ю к Д м и три й К озлова О ля К оле сн и к А рте м К оржов Н и к олай Л авски й Н и к олай М атю ш е вски й К и ри лл Н оваковск и й Се рге й О рлова А ле к сан д ра П олян ск и й В лад и слав П рон и н Се рге й Се рге е в Се рге й Скри п че н к ов Д е н и с Сок олов Се рге й Сороки н А н д ре й Сте ш е н к о Се рге й Тахи ров Ф и ру з
В ГУ В ГУ В ГП У В ГУ В ГУ В ГУ В ГУ В ГТУ ВВА ИИ СТИ М И Си В ГТА В ГУ СТИ М И Си В ГУ В ГП У В ГУ В ГУ В ГУ В ГП У В ГУ В ГУ В ГУ В ГП У В ГТА
ПММ Ф КН
2 2
ПММ ПММ ПММ Ф КН Ф А ЭМ
2 2 3 2 2 2 2 3 2 3 2 3 2 3 2 2 3 2 2 3
5,5 8 1 0,5 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
ТУ
3
0,2
Ф А ЭМ
2 2 3
0,2 0,2 0,1
С ПММ С ПММ ПММ ПММ ПММ ПММ ПММ ПММ
Ти щ е н к о И ван
СТИ М ГИ Си С
Ток арчу к Ром ан Ч е рн и ков В яче слав Ш у вае в Ярослав
В ГП У В ГТУ В ГТА
begin S:=0; for j:=1 to 4 do S:=S+A[i,j]+A[i+1,j]+A[i+2,j]+A[i+3,j]+A[i+4,j]; if S>=5 then begin ok:=true; flush:=true; end; end; if ok then flush:=true else flush:=false; 60
Резу льтаты второго ту ра в н ом и н аци и «П е рвок у рсн и к и » Ф .И .О . У ч.заве д е н и е Ф ак у льте т Су м м а баллов Н и к олае ва Татьян а Е вге н ье вн а В ГУ фи з 0,3 Д рап алю к В лад и м и р Се рге е ви ч В ГУ Щ е рбаков Е вге н и й А н атолье ви ч В ГУ
фи з ПММ 9
5 10
М ам е д ов Эм и н Ф арад О глы Солом ати н А ле ксе й И ван ови ч Ш али тки н А н д ре й В лад и м и рови ч Н е год яе в А ле ксе й М и хайлови ч Ре ве н к о А ле н а В але рье вн а К аш и ри н А ле ксан д р Н и к олае ви ч Л ан цу зски й М и хаи лМ и хайлови ч Ц е п ляе в К он стан ти н Ю рье ви ч М ам он ов Д м и три й Се рге е ви ч Сви ри д ов А н д ре й А ле к сан д рови ч К отов Се рге й А ле к сан д рови ч
В ГУ П М М В ГУ Ф К Н В ГУ П М М В ГП У фи зм ат В ГП У фи зм ат В ГП У фи зм ат В ГУ фи з В ГУ Ф К Н В ГУ П М М В ГУ фи з В ГУ П М М
7 10 5 5 0,3 1 0,3 2 7 5 0,5
function fourofakind:boolean; var j,i,l,count1,count2:byte; Ok:boolean; begin ok:=false; i:=2; while (not ok) and (i<=14) do begin if (A[i,1]<>0) and (A[i,2]<>0) and (A[i,3]<>0) and (A[i,4]<>0) then ok:=true; inc(i);
Ре зу льтаты второго ту ра в се кци и п ри клад н ого п рограм м н ого обе сп е че н и я Ф .И .О . У ч.заве д е н и е Су м м а баллов Б е лоброд ск и йА н д ре й В ГУ 14 Я н и н А ле к се й В ГП У 14 П авлов Л е он и д В ГУ 12,5 Н оваковск и й Се рге й В ГП У 12,5 К оржов Н и к олай В ГУ 11 Л у щ и к ов А ле ксе й В ГП У 11 Савви н П аве л В ГТА 11 Сте ш е н к о Се рге й В ГП У 10 Ф у рсова И ри н а В ГП У 10
end; if ok then begin dec(i); count1:=2; for l:=1 to 4 do if (A[i,1]=count1) or (A[i,2]=count1) or (A[i,3]=count1) or (A[i,4]=count1) then inc(count1); count2:=1; for l:=1 to 4 do if A[i,l]>count2 then count2:=A[i,l]; if count1-1=count2 then fourofakind:=true; end else fourofakind:=false;
Т р еть я о ткр ы та я р егио на ль на я студенческа я ш ко ла -о лим п иа да п о п р о гр а м м ир о ва нию и ко м п ь ютер но м у м о делир ова нию (п р оектТ 3112/2072) ПОЛ О Ж Е Н И Е о Тре тье й откры той ре ги он альн ойсту д е н че ск ой ш к оле - оли м п и ад е п о п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю О Б Щ И Е ПО Л О Ж Е Н И Я Тре тья отк ры тая ре ги он альн ая сту д е н че ск ая ш к ола-оли м п и ад а п о п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю п ровод и тся в рам к ах 10
end; function fullhouse:boolean; var j,i,l,count11,count12,count21,count22:byte; y1,y2:byte; Ok:boolean; begin y1:=0;y2:=0; for j:=2 to 14 do begin 59
Ф е д е ральн ой це ле вой п рограм м ы "И н те граци я н ау к и и образован и я", н ап равле н и е 2.7 "П рове д е н и е н ау чн ы х к он к у рсов, ш к ол и к он фе ре н ци й д ля сту д е н тов, асп и ран тов, м олод ы х п ре п од авате ле й и сотру д н и к ов ву зов и н ау чн ы хорган и заци й ", п рое к тТ3112. Головн ая орган и заци я п рое кта - В орон е жск и й госу д арстве н н ы й у н и ве рси те т. И сп олн и те ли : - В орон е жск и й госу д арстве н н ы й п е д агоги че ски й у н и ве рси те т (ре к тор п роф. П од к олзи н В .В .); - В орон е жски й ре ги он альн ы й це н тр Ф е д е раци и И н те рн е т образован и я (д и ре к тор п роф. Л ан д сбе рг С.Е .);
Var i,x,y:byte; code:integer; K:TKart; A:TKol; ch:string[3]; F:text; function straightflash:boolean; var j,i,l,count1,count2:byte; Ok:boolean;
П рое ктн ап равле н н а разви ти е творче ской акти вн ости сту д е н тов, ори е н таци ю у чащ е йся м олод е жи н а ре ш е н и е зад ач и н форм ати заци и н ау чн ы х
begin ok:=false; j:=1; while (not Ok) and (j<=4) do {for j:=1 to 4 do} begin i:=2; while (not Ok) and (i<=10) do {for i:=2 to 10 do} begin if (A[i,j]<>0) and (A[i+1,j]<>0) and (A[i+2,j]<>0) and (A[i+3,j]<>0) and (A[i+4,j]<>0) then Ok:=true; inc(i); end; inc(j) end; if ok then begin dec(i);dec(j); count1:=2; for l:=1 to 5 do if (A[i,j]=count1) or (A[i+1,j]=count1) or (A[i+2,j]=count1) or (A[i+3,j]=count1) or (A[i+4,j]=count1) then inc(count1); count2:=1; for l:=1 to 5 do if A[i+l-1,j]>count2 then count2:=A[i+l-1,j]; if count1-1=count2 then straightflash:=true; end else straightflash:=false; End; 58
и ссле д ован и й в сфе ре е сте стве н н ы х н ау к , а так же н а вы явле н и е н аи боле е талан тли вы хсту д е н тов в области м од е ли рован и я · фи зи че ски х, · хи м и че ск и х, · би ологи че ски х, · эк ологи че ски х, · ге ологи че ски х, · ге ографи че ск и х п роце ссов, п рое к ти рован и я и разработк и соотве тству ю щ и х п рограм м н ы х п род у к тов, и сп ользован и я се те вы х и м у льти м е д и йн ы х к ом п ью те рн ы х те хн ологи й, а так же в области и н форм аци он н ого м од е ли рован и я в · ли н гви сти к е , · ю ри сп ру д е н ци и . Мате ри алы ш к олы -оли м п и ад ы (н овости , сп и ск и у частн и к ов, зад ан и я ту ров, ре зу льтаты и д р.) бу д у т разм е щ аться н а стран и цах Web-сайта п о ад ре су www.olymp2003.nm.ru . П О РЯ Д О К П РО В Е Д Е Н И Я О ли м п и ад а п ровод и тся в д ва ту ра. Пе рвы й ту р п ровод и тся в те ле к ом м у н и к аци он н ом ре жи м е (25 се н тября 2003 год а в 15 часов), второй (осн овн ой) - н а лабораторн ой базе В орон е жск ого у н и ве рси те та (н оябрь2003 год а). В ш к оле -оли м п и ад е м огу т п ри н ять у части е сту д е н ты лю бы х к у рсов лю бы хву зов Ц е н тральн о-Ч е рн озе м н ого и д ру ги хре ги он ов, вк лю чая бли жн е е и д альн е е зару бе жье . 11
К о втором у этап у , которы й бу д е т п роход и ть в В орон е же , бу д у т д оп у щ е н ы п обе д и те ли п е рвого этап а. П ре д у см отре н а работа д ву хсе к ци й: - се кци я п рограм м и рован и я и к ом п ью те рн ого м од е ли рован и я; - се кци я п ри клад н ого п рограм м н ого обе сп е че н и я. И тоги оли м п и ад ы бу д у тп од вод и ться п о н ом и н аци ям : - п е рвок у рсн и ки ; - сту д е н ты , д ля к оторы х и н форм ати к а являе тся п рофи ли ру ю щ е й д и сци п ли н ой; - сту д е н ты , д ля которы х и н форм ати ка являе тся общ е образовате льн ой д и сци п ли н ой; - сту д е н ты те хн и че ск и хву зов; - сту д е н ты вое н н ы хву зов; - сту д е н ты ю ри д и че ск и хи гу м ан и тарн ы хсп е ци альн осте й; - сту д е н тки . В сту п и те льн ы й взн ос д ля у части я в ш к оле -оли м п и ад е н е тре бу е тся. В п робн ом и п е рвом ту ре м огу т п ри н ять у части е все же лаю щ и е . К у части ю в осн овн ом ту ре бу д у т д оп у щ е н ы 20 и н огород н и х и 30 м е стн ы х у частн и ков, п оказавш и е лу чш и е ре зу льтаты в п е рвом ту ре . Ре ш е н и е о д оп у ск е к у части ю во втором ту ре п ри н и м ае тся оргк ом и те том оли м п и ад ы . И н огород н и е у частн и к и осн овн ого ту ра разм е щ аю тся в общ е жи ти и (гости н и це ) и обе сп е чи ваю тся п и тан и е м бе сп латн о. У частн и ки оли м п и ад ы п рослу ш аю тле кци и ве д у щ и ху че н ы хп о совре м е н н ы м п робле м ам н ау к и и п ри м у т у части е в работе кру глого стола "К ом п ью те рн ы е те хн ологи и в образован и и ". Точн ая д ата п рове д е н и я второго ту ра ш к олы оли м п и ад ы
оп ре д е ляе тся оргком и те том
и
оглаш ае тся че ре з СМИ
и
в
И н те рн е те .
b=besthand(Cards); if (b>best) best=b; /* printf("Combination: "); for(i=0;i<5;i++) printf("%c%c ",Cards[i][0],Cards[i][1]); printf(" ==> %s\n",names[b]); //*/ } fprintf(o,"Hand: "); for(i=0;i<5;i++) fprintf(o,"%c%c ",MyCards[i][0],MyCards[i][1]); fprintf(o,"Deck: "); for(i=0;i<5;i++) fprintf(o,"%c%c ",StackCards[i][0],StackCards[i][1]); fprintf(o,"Best hand: %s\n",names[best]); } fclose(f); fclose(o); return 0; } 9. И г р ок-медиу м
П О Д В Е Д Е Н И Е И ТО ГО В И Н А ГРА Ж Д Е Н И Е П О Б Е Д И ТЕ Л Е Й П од ве д е н и е и тогов откры той ре ги он альн ой сту д е н че ск ой ш к олы - оли м п и ад ы п о п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю п ровод и тся оргком и те том оли м п и ад ы . О ри ги н альн ы е ре ш е н и я бу д у т оп у бли к ован ы в сборн и ке "О ли м п и ад н ы е зад ачи . Л у чш и е ре ш е н и я". П обе д и те ли оли м п и ад ы н агражд аю тся грам отам и и п ри зам и . Сп и сок п ри зе ров оли м п и ад ы , зан явш и х 1-10 м е ста, п е ре д ае тся в ву зы ре ги он а, а так же разм е щ ае тся н а Web-сайте www.olymp2003.nm.ru . 12
П ри вод и м ре ш е н и е , п ре д ложе н н ое сту д е н том 3 к у рса В орон е жск ого и н сти ту та М В Д РФ К озловы м Ю р ием {
[email protected]} Uses Crt; type TKart = array[1..10] of string[2]; TKol = array[2..14,1..4] of byte; 57
// Счи ты вае м карты в к олод е
Н аш и ре к ви зи ты : 394693 В орон е ж, У н и ве рси те тская п л., 1. К афе д ра м ате м ати че ского обе сп е че н и я ЭВ М фак у льте та п ри к лад н ой м ате м ати ки , и н форм ати к и и м е хан и ки (ау д .8). О ргк ом и те т ш к олы -оли м п и ад ы п о п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю . E-mail:
[email protected] URL: www.olymp2003.nm.ru Те ле фон ы : (0732) 208-698, 208-266
for(i=0;i<5;i++) { StackCards[i][0]=fgetc(f); StackCards[i][1]=fgetc(f); fgetc(f); } // Н ачи н ае м би н арн ы й п е ре бор best=0; for(v=0;v<32;v++) { _v=v; cn=0; for(i=0;i<5;i++) { if (_v%2) { Cards[cn][0]=MyCards[i][0]; Cards[cn][1]=MyCards[i][1]; cn++; } //
О ргк ом и те т откры тойре ги он альн ойсту д е н че ск ой ш к олы -оли м п и ад ы п о п рограм м и рован и ю и к ом п ью те рн ом у м од е ли рован и ю (Ф е д е ральн ая це ле вая п рограм м а "И н те граци я", разд е л2.7, п рое к тТ3112/2072) П ре д се д ате ль оргком и те та - ЗА П РЯ ГА Е В Се рге й А ле ксан д рови ч, П е рвы й п роре к тор В орон е жск ого госу н и ве рси те та, д октор фи зи к о-м ате м ати че ск и хн ау к , п рофе ссор Зам . п ре д се д ате ля - Ш А Ш К И Н А ле к сан д р И ван ови ч, д е к ан фак у льте та П М М, д ок тор фи зи к о-м ате м ати че ск и хн ау к , п рофе ссор. Л А Н Д СБ Е РГ Се рге й Е вге н ье ви ч, д и ре к тор В орон е жск ого ре ги он альн ого це н тра и н форм ати заци и вы сш е й ш к олы , д октор те хн и че ски х н ау к , п рофе ссор У СК О В А О льга Ф е д оровн а, д оце н ткафе д ры м ате м ати че ского обе сп е че н и я ЭВ М В ГУ , к ан д и д атте хн и че ск и хн ау к , к оорд и н атор п рое к та ГО РБ Е Н К О О ле г Д ан и лови ч, зав.к афе д ройм ате м ати че ск ого обе сп е че н и я
printf("%d",_v%2); _v>>=1; } for(i=0;cn<5;i++,cn++) { Cards[cn][0]=StackCards[i][0]; Cards[cn][1]=StackCards[i][1]; } // Д ля те к у щ е йк ом би н аци и и щ е м м акси м альн у ю це н н ость 56
ЭВ М В ГУ , к ан д и д атфи зи к о-м ате м ати че ск и хн ау к П О ТА П О В А ле ксан д р Се рге е ви ч, п роре к тор В орон е жск ого госп е д у н и ве рси те та, п рофе ссор Д А Н ЬШ И Н Б ори с И ван ови ч, д и ре ктор к ом п ан и и «И н форм связь-Че рн озе м ье » А Н ТИ П О В Се рге й А н атолье ви ч, ре ктор В орон е жск ого областн ого и н сти ту та п овы ш е н и я квали фи каци и и п е ре п од готовки работн и к ов образован и я, д октор фи зи к о-м ате м ати че ски хн ау к , п рофе ссор Л А П Ы ГИ Н Д м и три й Ру д ольфови ч, зам . ге н е ральн ого 13
д и ре ктора ЗА О "РЕ Т", г.В орон е ж ЗА Й Ц Е В А н атоли й М и хайлови ч, п ре д се д ате льком и те та п о н ау к е и вы сш е й ш коле Главн ого у п равле н и я образован и я ад м и н и страци и В орон е жск ой области ТО Л СТО Б РО В А ле ксан д р Павлови ч, п роре ктор п о и н форм ати заци и В орон е жск ого госу н и ве рси те та О ли м п и йски й сове т Я К У Б Е Н К О А н д ре й, асп и ран т1 год а обу че н и я П Л А Х О ТН Ы Й В лад и м и р, сту д е н т4 к у рса П О Л Я К О В А н д ре й, асп и ран т1 год а обу че н и я Е Ф РЕ М О В М ак си м , асп и ран т1год а обу че н и я М Х И ТА РЯ Н Л у си н е , асп и ран т1год а обу че н и я ГЛ А Д Ы Ш Е В О ле г, м аги стран т2 год а обу че н и я
if (pair&&(best<1)) best=1; //one-pair if (three&&(best<3)) best=3; //three-of-a-kind return best; } int main(void) { char MyCards[5][2]; char StackCards[5][2]; char Cards[5][2]; char c; int i,cn; int take;
Ж ю р иш кол ы -ол им п иады П ре д се д ате льжю ри ГО РБ Е Н К О О ле г Д ан и лови ч, зав. к афе д рой м ате м ати че ского обе сп е че н и я ЭВ М В ГУ , кан д и д атфи зи к о-м ате м ати че ски х н ау к . Зам .п ре д се д ате ля У СК О В А О льга Ф е д оровн а, д оце н ткафе д ры м ате м ати че ского обе сп е че н и я ЭВ М В ГУ , кан д и д атте хн и че ски хн ау к . Ч ле н ы жю ри : М И Л О В СК А Я Л ю д м и ла Се рафи м овн а, д оце н ткафе д ры и н форм ати к и В ГП У , кан д и д атфи зи ко-м ате м ати че ски хн ау к ; Б А К Л А Н О В М и хаи лВ лад и м и рови ч, п ре п од авате льк афе д ры п рограм м и рован и я и и н форм аци он н ы хте хн ологи й В ГУ ; М Е Л ЬН И К О В В ад и м М и трофан ови ч, п ре п од авате лькафе д ры м ате м ати че ского обе сп е че н и я ЭВ М В ГУ ; СЕ Л Е ЗН Е В К он стан ти н Е горови ч, Н П О «Ре лэкс»; ЧУ Л Ю К О В В лад и м и р А ле ксе е ви ч, д оце н тк афе д ры и н форм ати ки В орон е жск ого госп е д у н и ве рси те та; А РХ И П О В В и к тор П е трови ч, зав. к афе д рой м ате м ати ки Старооскольск ого фи ли ала МИ СИ С; ГУ СЕ В В лад и м и р А ле ксе е ви ч, главн ы й сп е ци али стком и те та п о н ау к е и вы сш е й ш коле Главн ого у п равле н и я образован и я ад м и н и страци и В орон е жск ой области . Сп онсор ы Т ретьей откры той регионал ьной сту денческой ш кол ы ол им п иады п оп р ог р аммир ованию икомп ью тер ном у м одел ир ованию ЗА О "РЕ Т", г.В орон е ж (Ге н е ральн ы й д и ре ктор - В лад и м и р М и хайлови ч К олы хали н , вы п у ск н и к фак у льте та П М М В ГУ ) К осм е ти че ск ая фи рм а NINELLE, И сп ан и я (Б ре н д -м е н е д же р ком п ан и и п о 14
int best,b; int v,_v; FILE*f,*o; printf("Зад ача 2 (\"И грок -м е д и у м \")\nБ абан и н Д м и три й,\nТам бовск и й Госу д арстве н н ы й Те хн и че ски й У н и ве рси те т,\nфак у льте т А Х П ,\nсп е ци альн остьСА П Р(2203)\nгр. В -21\n"); f=fopen("input.txt","r"); o=fopen("output.txt","w"); if (!f) return 1; while(!feof(f)) { // Счи ты вае м карты н а ру к ах for(i=0;i<5;i++) { MyCards[i][0]=fgetc(f); MyCards[i][1]=fgetc(f); // Е сли в кон це файла и м е ли сьли ш н и е си м волы if (fgetc(f)==EOF) { fclose(f); return 0; }; }
55
case 'T': nominalq[8]++; break; case 'J': nominalq[9]++; break; case 'Q': nominalq[10]++; break;
Ц ЧЭР- Гали н а И ван ова) ЗА О "РЕ Л ЭК С", г.В орон е ж(Ге н е ральн ы йд и ре к тор - И горьА ле ксе е ви ч Б ойче н ко, вы п у скн и к фак у льте та П М и А СУ В ГУ )
case 'K': nominalq[11]++; break; case 'A': nominalq[12]++; break; }
О О О «Эксп е рт» (Д и ре к тор – Се рге йД м и три е ви ч М ахортов, кан д и д ат фи зи к о-м ате м ати че ск и хн ау к , вы п у скн и к фак у льте та П М М В ГУ ) О О О «Б У РУ Т» (Ге н е ральн ы й д и ре к тор – К олы хали н В и к тор М и хайлови ч)
switch(Cards[i][1]) {
О О О "OCS-Ю г" (Д и ре к тор - И горьЮ рье ви ч Б ату е в, вы п у скн и к фак у льте та П М М В ГУ )
case 'C': mastq[0]++; break; case 'D': mastq[1]++; break;
К ом п ан и я «И н форм связь– Че рн озе м ье » (Ге н е ральн ы й д и ре к тор - Б ори с И ван ови ч Д ан ьш и н , вы п у ск н и к фак у льте та П М М В ГУ )
case 'H': mastq[2]++; break; case 'S': mastq[3]++; break;
Ц е н тральн о-Че рн озе м н ое п ре д стави те льство к орп ораци и «Пару с» (Ге н е ральн ы йд и ре к тор - А ле к сан д р В лад и м и рови ч А зн ау рьян ц, вы п у скн и к фак у льте та П М М В ГУ )
} } for(i=0;i<4;i++) if (mastq[i]>maxm) maxm=mastq[i]; for(i=0;i<13;i++) { if ((no minalq[i]==2)&&(pair==1)&&(best<2)) best=2; //two-pairs if (nominalq[i]==2) pair=1;
О О О «М он и тор-Се рви с» (Ге н е ральн ы й д и ре ктор - О ле г П е трови ч М ахн аче в, вы п у ск н и к фак у льте та П М М В ГУ ) Ф и рм а Л он д а К олор,Ге рм ан и я (М е н е д же р п о клю че вы м кли е н там О .П .Ф ролова) Газе та «К ом п ью те рра-Ре ги он » (Главн ы й ре д актор и зд ате льск ого д ом а С.В .К оле сн и кова)
if (nominalq[i]==3) three=1; if ((no minalq[i]==4)&&(best<7)) best=7;//four-of-a-kind if (nominalq[i]) length++; else length=0;
В орон е жск ое п ре д стави те льство и зд ате льск ого д ом а «Пи те р» (Ге н е ральн ы й д и ре ктор – Д м и три й Ш и ш к и н )
if (length>maxlength) maxlength=length; // length=0;
if ((i>0)&&(nominalq[i]>0)&&(nominalq[i-1]>0)) length++; else
if ((i==0)&&(nominalq[0])) length=1; if ((length==4)&&(best<4)) best=4; //straight if ((length==5)&&(best<5)) best=5; //flush } if (pair&&three&&(best<6)) best=6; //full-house if ((maxlength==5)&&(maxm==5)) best=8; //straight-flush 54
И нф ор мац ионная п оддерж каш кол ы -ол имп иады Газе та «К ом п ью те рра-ре ги он » В орон е жск ое госу д арстве н н ое рад и о Сту д и я «Гу бе рн и я» те ле к ан ала ТН Т Газе та "М олод ойк ом м у н ар" Газе та «Ф ак у льте т П М М » Газе та «В орон е жск и й к у рье р» Газе та «В орон е жск ое обозре н и е » Газе та «В орон е жски й у н и ве рси те т» Газе та «М оё» 15
"three-of-a-kind", 1. Секц ия ал г оритмизац ииип р ог р аммир ования
"straight", "flush",
З адач а (общ ая дл я всех номинац ий)
"full-house", "four-of-a-kind", "straight-flush"
"П ом огисп ел еол огу " В ы п оп али в тре хм е рн у ю п е щ е ру и вам н е обход и м о н айти кратчайш и й п у ть к вы ход у . Пе щ е ра п ре д ставляе т собой к у б, в к отором е сть п роход ы . П е ре м е щ е н и е в лю бом н ап равле н и и (вве рх, вн и з, вп раво, вле во, вп е ре д , н азад ) зан и м ае т ровн о од н у м и н у ту . Пе ре м е щ аться п о д и агон али и че ре з сте н ы п е щ е ры н е разре ш ае тся. В озм оже н ли вы ход и з такой п е щ е ры и е сли «д а», то ск олько вре м е н и вам п он ад оби тся? В ходны е да нны е В ход н ой файл INPUT.TXT состои т и з оп и сан и й н е ск ольки х п е щ е р. О п и сан и е кажд ойп е щ е ры н ачи н ае тся со строки стре м я це лы м и чи слам и L, R и C ( все чи сла н е больш е 30). L – коли че ство у ровн е й в п е щ е ре , R, C – к оли че ство строк и колон ок в п лан е к ажд ого этажа. Д але е сле д у ю тL блок ов д ан н ы х, кажд ы й и з к оторы х п ре д ставляе т R строк , сод е ржащ и х C си м волов. К ажд ы й си м волоп и сы вае тяче йк у п е щ е ры . Сте н ы обозн аче н ы си м волом ‘#’ , а яче йки гд е п роход разре ш е н ‘.’ (точк ой) . Н ачальн ая п ози ци я у к азы вае тся си м волом ‘S’, а вы ход си м волом ‘E’ . П осле оп и сан и я к ажд ого у ровн я п е щ е ры сле д у е т ровн о од н а п у стая строк а. В вод заве рш ае тся строк ой, сод е ржащ е й три н у ля в каче стве L, R, C. В ы ходны е да нны е К ажд ой п е щ е ре в вы ход н ом файле OUTPUT.TXT д олжн а соотве тствовать од н а строка. Е сли В ы н аш ли вы ход , то ви д строки сле д у ю щ и й: В ы ш ли за x м и н у т. гд е x к ратчайш е е вре м я, за к оторое возм оже н вы ход . Е сли вам н е у д алось н айти вы ход , н ап е чатайте строчк у : Л ову ш к а!
}; int besthand(char Cards[5][2]) { int i; int maxm=0; int best=0; int pair=0; int three=0; int length=0,maxlength=0; char mastq[4]={0,0,0,0}; char nominalq[13]={0,0,0,0,0,0,0,0,0,0,0,0,0}; for(i=0;i<5;i++) { switch(Cards[i][0]) { case '2': nominalq[0]++; break;
П р им ер входны хда нны х
case '3': nominalq[1]++; break;
345
case '4': nominalq[2]++; break;
S....
case '5': nominalq[3]++; break;
.###.
case '6': nominalq[4]++; break;
.##..
case '7': nominalq[5]++; break;
###.#
case '8': nominalq[6]++; break;
#####
case '9': nominalq[7]++; break;
##### 16
53
exit;
##.##
end;
##...
{Ц и к лчте н и я и з вход н ого файла}
#####
repeat
#####
readln(F_in,s);
#.###
if s='0 0 0' then break;
####E
val(copy(s,1,pos(' ',s)-1),k,code); delete(s,1,pos(' ',s));
133
val(copy(s,1,pos(' ',s)-1),a,code);
S##
delete(s,1,pos(' ',s));
#E#
val(s,b,code);
###
writeln(k,' ',a,' ',b); Count:=0;
000
GetCount(k,1024,1024);
П р им ер вы ходны х да нны х
writeln(F_out,Count);
В ы ш ли за 11 м и н у т.
writeln(Count);
Л ову ш к а!
until false;
З адачи п о н ом ин ац ия м
Close(F_in);
И нф ор матикакак п р оф ил ир у ю щ ая дисц ип л ина
Close(F_out); readkey
« В одител и-бол ту ны »
end. 8. И г р ок-медиум Сту д е н т 2 к у рса Там бовск ого госу д арстве н н ого те хн и че ск ого у н и ве рси те тДм итр ий Ба ба нин п ре д ложи лсле д у ю щ и й вари ан тре ш е н и я этой зад ачи #include <stdio.h> char names[][16]={ "highest-card", "one-pair", "two-pairs", 52
В кажд ом город е е сть общ е стве н н ы й тран сп орт. Н а к ажд ом м арш ру те автобу с д ви же тся п о к ольцу , и к ажд ая ли н и я и м е е т, п о к райн е й м е ре , д ве остан овк и . Н е которы е ли н и и и м е ю т общ и е остан овк и . К огд а д ва и боле е вод и те ля встре чаю тся н а од н ой остан овке , он и обм е н и ваю тся свои м и н овостям и , и с этого вре м е н и кажд ы й и з н и хзн ае ти свои н овости , и чу жи е . В се вод и те ли н ачи н аю т д ви же н и е н а ли н и ях в од н о и тоже вре м я. К ажд ы й автобу с все вре м я сове рш ае т п ое зд ки п о од н ой и той же ли н и и . Разли чн ы е автобу сы н а од н ой ли н и и старту ю т, возм ожн о, н а разли чн ы х остан овк ах в н ачале д н я. А втобу сы работаю т оче н ь си н хрон н о. В ре м я н е обход и м ое , чтобы д ое хатьотод н ой остан овк и д о д ру гой од и н ак ово д ля все х остан овок и все х ли н и й. И зве стн о, что в город е n автобу сн ы хли н и й (0 < n < 20), d вод и те ле й (и так же d автобу сов) (0 < d < 30) п рон у м е рован н ы х чи слам и от 1 д о d, и s 17
автобу сн ы хостан овок (0 < s < 50), п рон у м е рован н ы хот1 д о s. В од и те ли хотятзн ать, м оже тли к ажд ы й и з н и ху зн атьв н е к оторое вре м я всю и н форм аци ю , к оторая и зве стн а е го колле гам . Н ап и ш и те п рограм м у , к оторая п ом оже тотве ти тьн а этотвоп рос. В ходны е да нны е В ход н ой файлсод е ржи тблоки строк . К ажд ы й блок , и склю чая п осле д н и й, оп и сы вае т од и н город . В п е рвой строк е блок а це лы е чи сла n, d и s разд е ляе м ы е од н и м п робе лом . Сле д у ю щ и е 2n строки оп и сы ваю т n автобу сн ы х ли н и й (2 строки н а к ажд у ю ли н и ю ) п о сле д у ю щ и м п рави лам : в п е рвой строке и д у т н ом е ра остан овок , разд е ле н н ы е п робе лом . О стан овки п е ре чи сле н ы в п оряд ке , п о к отором у автобу с объе зжае ти х. П осле п осле д н е й остан овк и в сп и ск е автобу с сле д у е т к п е рвой. В торая строк а оп и сы вае т, с к ак и х остан овок н ачи н аю т д ви же н и е автобу сы в н ачале д н я. О п и сан и е состои т и з п ар si, di, гд е si – н ом е р остан овки и di – н ом е р вод и те ля. В се чи сла si, di н а строке разд е ле н ы од н и м п робе лом . После д н и й блок сод е ржи т од н у строк у , состоящ у ю и з тре хн у ле й«0 0 0». В ы ходны е да нны е В ы ход н ой файл сод е ржи т строки , соотве тству ю щ и е блок ам во вход н ом файле . Строка «Д а», е сли соотве тству ю щ и й блок в файле вход а оп и сы вае т си ту аци ю , к огд а к ажд ы й вод и те льбу д е тзн атьв н е которое вре м я все н овости от свои х к олле г. И н аче строк а сод е ржи т «Н е т». Д ля п осле д н е й строки вход н ого файла, соотве тству ю щ ая строк а вы ход н ого н е форм и ру е тся. П р им ер входны хда нны х 2 3 5 1 2 3 1 1 2 2 2 3 4 5 2 3 0 0 0 П р им ер вы ходны хда нны х Да И нф ор матикакак общ еобр азовател ьная дисц ип л ина(вкл ю чая тех нические ивоенны еву зы )
if k=1 then exit; {При н и м ае м н овы е це н тры к вад ратов - ве рш и н ы те к у щ е го к вад рата и бе ре м н овое k} GetCount(k div 2,LeftX,LeftY); GetCount(k div 2,LeftX,LeftY+2*k); GetCount(k div 2,LeftX+2*k,LeftY+2*k); GetCount(k div 2,LeftX+2*k,LeftY); end; {О сн овн ая часть} begin clrscr; assign(F_in,'Input.txt'); {$I-} reset(F_in); {$I+} if IOResult<>0 then begin writeln('О ш и бка откры ти я вход н ого файла Input.txt'); readkey; exit; end; assign(F_out,'Output.txt'); {$I-} rewrite(F_out);
"П р я м оу г ол ьник"
{$I+}
Д ан а п осле д овате льн остьN*8 ве щ е стве н н ы хчи се л. О че ре д н ая восьм е рка чи се л оп ре д е ляе т к оорд и н аты ве рш и н че ты ре ху гольн и к а н а п лоск ости , п ри че м п оряд ок сле д ован и я коорд и н ат ве рш и н отве чае т обход у ве рш и н че ты ре ху гольн и ка ли бо п о часовой стре лк е , ли бо п роти в часовой стре лки . Тре бу е тся вы брать восьм е рк у чи се л, которы е оп ре д е ляю т ве рш и н ы п рям оу гольн и к а. О п ре д е ли ть, ск ольк о так и хвосьм е рок чи се лм ожн о вы брать. 18
if IOResult<>0 then begin Close(F_in); writeln('О ш и бка созд ан и я вы ход н ого файла Output.txt'); readkey; 51
fclose(out); fclose(in); } 7. В секвадр аты Сту д е н т Там бовск ого госу д арстве н н ого те хн и че ск ого у н и ве рси те та А лексей Титков п ре д ложи лсвой вари ан тре ш е н и я этой зад ачи
Н айти восьм е рк у чи се л, которой соотве тству е т п рям оу гольн и к с м ак си м альн ойп лощ ад ью . В ы чи сле н и я п рои звод и тьсзад ан н ой точн остью Е . В ход н ой файл INPUT.TXT сод е ржи т в п е рвой строке чи сла N и Е , в кажд ойи з N п осле д у ю щ и хстрок – п о восе м ьчи се л. В ы ход н ой файл OUTPUT.TXT д олже н сод е ржать в п е рвой строк е чи сло возм ожн ы х восьм е рок чи се л, во второй – п е рву ю и з так и х восьм е рок чи се л, соотве тству ю щ и х п рям оу гольн и к у , в тре тье й - восьм е рк у чи се л, соотве тству ю щ и хп рям оу гольн и к у см ак си м альн ойп лощ ад ью .
uses crt; П р им ер входны хда нны х:
var k:integer; {Разм е р к вад рата}
2 0.00001
a,b:integer; {К оорд и н аты кле тки } Count:integer; {К оли че ство квад ратов, сод е ржащ и хэту кле тк у } F_in, F_out:Text; {П е ре м е н н ы е д ля работы с файлам и } s:string; {Срок а, счи ты вае м ая и з файла} code:integer; {К од ош и бк и (ю зать н е бу д е м , н о он н у же н в п роце д у ре
11313313 11314413 П р им ер вы ходны х да нны х(д ля п ри ве д е н н ого вы ш е вход н ого файла):
val)} 1 {П роце д у ра п од сче та к оли че ства квад ратов, вк лю чаю щ и хд ан н у ю к ле тк у k - разм е р к вад рата x,y - к оорд и н аты це н тра к вад рата}
11313313 11313313
procedure GetCount(k,x,y:integer); Ю р идические иг у манитарны есп ец иал ьности
var LeftX,LeftY:integer; {К оорд и н аты ле вого ве рхн е го у гла к вад рата} begin {О п ре д е ле н и е к оорд и н атле вого ве рхн е го у гла те к у щ е го к вад рата}
"А иБ "
LeftY:=y-k;
В ве д е н н ы й те к стп ре д ставляе тсобой п ре д ложе н и е , в к отором встре чае тся п е ре чи сле н и е д ву х объе ктов, связан н ы х сою зом «и ». Тре бу е тся п ом е н ять м е стам и слова, сое д и н е н н ы е эти м сою зом . Н ап ри м е р, те кст«А и Б си д е ли н а тру бе » п осле п ре образован и я д олже н и м е тьви д «Б и А си д е ли н а тру бе ».
{П рове рка у слови я н ахожд е н и я д ан н ойточки в те к у щ е м к вад рате }
Пер воку р сники
if (LeftX<=a) and (LeftY<=b) and
Задача"Т еатр "
LeftX:=x-k;
(LeftX+2*k+1>=a) and (LeftY+2*k+1>=b) then inc(Count); {У слови е вы ход а и з ре к у рси и } 50
В те атре N м е ст, п рон у м е рован н ы х це лы м и чи слам и от 1 д о N. Н е к оторы е и з зри те ле й оп озд али н а сп е к так ль, п оэтом у п осле тре тье го звон ка те зри те ли , к оторы е и м е ли би ле ты н а н е у д обн ы е м е ста, п е ре се ли н а боле е у д обн ы е . О п озд авш и е зри те ли , к оторы е п ри ш ли у же п осле тре тье го звон ка, сад и ли сьн а п е рвое п оп авш е е ся свобод н ое м е сто. 19
a.dy=q.dy+k; В ан тракте од и н и з оп озд авш и хзри те ле й ре ш и лсе стьн а свое м е сто. Е сли е го м е сто д о этого бы ло зан ято, то тот, кто там си д е л, п е ре сажи вался н а свое м е сто. Е сли и там к то-то у же си д е л, то и этот зри те ль также вы н у жд е н бы л ве рн у ться н а свое м е сто. И так д але е . П оскольк у в те атр п оп али тольк о зри те ли , и м е вш и е н а ру к ах би ле ты , то н ачавш и йся в ан трак те п роце сс п е ре сажи ван и я зри те ле й обязате льн о зак ан чи вался. Н е обход и м о п од счи тать, скольк о че лове к в ре зу льтате такого п е ре сажи ван и я бы ли вы н у жд е н ы п ом е н ятьсвои м е ста.
a.r=q.r / 2; return a; } int sod (quad q,int cx,int cy) {int k=q.r; return (cx>=q.dx-k && cx<=q.dx+k && cy>=q.dy-k && cy<=q.dy+k);
Тре бу е тся созд ать п рограм м у д ля вы чи сле н и я к оли че ства зри те ле й, п ом е н явш и хсвои м е ста и з-за оп озд ан и я од н ого зри те ля.
}
Ф ор м а т входны хда нны х: В ход н ой файл INPUT.TXT состои т и з тре х строк . В п е рвой строке сод е ржи тся це лое чи сло N (N<=30000) — к оли че ство м е ств зале . В торая строка сод е ржи т п осле д овате льн ость и з N це лы х чи се л, разд е ле н н ы хп робе лам и , гд е п е рвое чи сло оп ре д е ляе тн ом е р м е ста в би ле те у зри те ля, которы й зан ялм е сто с н ом е ром 1, второе - н ом е р м е ста в би ле те у зри те ля, к оторы й зан ял м е сто с н ом е ром 2, и так д але е . Е сли м е сто бы ло свобод н о, то соотве тству ю щ е е чи сло равн о 0. В тре тье й строк е сод е ржи тся од н о чи сло - н ом е р м е ста в би ле те у оп озд авш е го зри те ля, к оторы й в ан тракте ре ш и лп е ре се стьн а свое м е сто. Ф ор м а т вы ходны хда нны х: В ы ход н ойфайлOUTPUT.TXT д олже н сод е ржатьод н о чи сло — к оли че ство зри те ле й, п ом е н явш и хсвои м е ста в ан тракте , вк лю чая оп озд авш е го зри те ля.
void main ()
П р им ер ф а йлов входны хи вы ходны хда нны х:
{FILE *in=fopen("input.txt","r"); FILE *out=fopen("output.txt","w"); int k,cx,cy; fscanf(in,"%d",&k); while (k!=0) {fscanf(in,"%d",&cx); fscanf(in,"%d",&cy); quad q={1024,1024,k}; int ct=0; while (q.r>1) {if (sod(q,cx,cy)) ct++;
INPUT.TXT
OUTPUT.TXT
10
3
if (cx<=q.dx && cy<=q.dy) q=getlh(q); else if (cx>q.dx && cy<=q.dy) q=getrh(q);
0253100000
else if (cx<=q.dx && cy>q.dy) q=getll(q); else if (cx>q.dx && cy>q.dy) q=getrl(q);
4 } Сту дентки В этойном ина ции м ожно вы бр а тьза да чи, пр едложенны е в др у гих номина циях, и отвеча ющие своейспециа льности. 20
if (sod(q,cx,cy)) ct++; fscanf(in,"%d",&k); fprintf(out,"%d\n",ct); } 49
2. Секц ия п р икл адного п р ог р аммног ообеспечения
typedef struct quad { int dx,dy,r; };
Задание 1.
quad getlh(quad q) Созд ать эм бле м у ш к олы -оли м п и ад ы к ом п ью те рн ом у м од е ли рован и ю .
{quad a; int k=q.r;
по
п рограм м и рован и ю
и
Тре бован и я:
a.dx=q.dx-k; a.dy=q.dy-k;
1) Работа м оже тбы тьвы п олн е н а в лю бом ре д акторе .
a.r=q.r / 2;
2) Пом и м о графи че ск и х эле м е н тов эм бле м а д олжн а сод е ржать н азван и е и ли аббре ви ату ру н азван и я оли м п и ад ы и год п рове д е н и я.
return a; }
Задание 2. quad getrh(quad q) Созд атьги п е рте к стовы й д ок у м е н т, сод е ржащ и й и н форм аци ю о авторе , е го гру п п е и у че бн ом заве д е н и и , в к отором у чи тся автор.
{quad a; int k=q.r; a.dx=q.dx+k;
Тре бован и я:
a.dy=q.dy-k;
1) Д и зайн е рск ое ре ш е н и е д олжн о вклю чатьфото автора, фото гру п п ы (п од гру п п ы ), работаю щ е й в ком п ью те рн ом к лассе и фото зд ан и я ву за.
a.r=q.r /2; return a;
2) В се файлы д олжн ы сод е ржаться в од н ом каталоге . Ссы лки д олжн ы бы тьотн оси те льн ы м и .
} quad getll(quad q) {quad a;
Задание 3.
int k=q.r;
Сре д ствам и Excel созд ать файл, сод е ржащ и й ре ш е н и е н ахожд е н и я оп ре д е ли те ля м атри цы разм е ра 4×4.
a.dx=q.dx-k; a.dy=q.dy+k;
Тре бован и я:
a.r=q.r /2; return a;
1) Н али чи е заголовков.
}
2) Сохран е н и е форм у л.
quad getrl(quad q) {quad a;
3) Расп оложе н и е и сход н ы хд ан н ы хи ре ш е н и я н а од н ом эк ран е .
int k=q.r; a.dx=q.dx+k; 48
21
зад ачи
У частникивтор ог о(основног о) ту р а Иногор одние уча стники Ба ба нин Д.В . Та мбов Титков А .В . Та мбов К а линкин В .Ю . Ростов-на -Дону П р оцу кР.Н. Та м бов З а ха р ов А .В . Та мбов Новиченко А .В . Белгор од М иллер М .В . В олгогр а д М а ла ш енко О .П . С т. О скол Гильм ияр ов К .Р. Новочер ка сск А нисим ов М .В . Е лец К ор зеников А .Л . Бр янск Ти щ е н к о И .И . Ст. О скол К озлова О .В . С т. О скол С а м онин М .Н . Та мбов Ба йм а ков А .А . Белгор од С а хинов К .В . Белгор од Довженко Е .В . С т. О скол П у нин Н.Г. Та м бов Ш иш ковский А .С . Ростов-на -Дону Щ едр ин А .Г. Е лец К у леш ов А .А . Ту ла П р иты кин Д.Е . Новочер ка сск ХодосП .А . С та р ы йО скол С оболь С .Б. Ростов-на -Дону Л а нскойН. С та р ы йО скол В ор о неж ские уча стники П а невин С .В . В ГТУ Беленко П .В . В ГУ , Ф К Н М у хоедов Д.С . В ГУ , П М М Бу лга ков И .А . В ГУ , Ф К Н К р ячков М .В . В ГУ , П М М С олом а тин А . В ГУ , Ф К Н Носова О .В . В ГУ , П М М Безр одны йА .Н. В В И РЭ Га йда йВ .А . В ГУ , П М М Глу хов А .Л . В ГУ , П М М Ш ест опа лова Е .В . В ГУ , П М М П огор еленко В . В ГУ , П М М Чер ников В .Н . В ГТУ Чопор ов Г.А . В ГУ , ж у р ф а к Ш у льгина Е .Ю . В ГУ , П М М 22
5. В секвадр аты Е щ е од н о ре ш е н и е этой зад ачи п ре д ложи л п е рвок у рсн и к фи зи че ск ого фак у льте та В ГУ А лексей Толу ба ев, е д и н стве н н ы й и з у частн и к ов п ри м е н и вш и й язы к п рограм м и рован и я Б е йси к и п олу чи вш и й п ри з си м п ати й О ли м п и йского сове та. CLS OPEN "h:\reshenia\zad_1\input.txt" FOR INPUT AS #1 OPEN "h:\reshenia\zad_1\output.txt" FOR OUTPUT AS #2 WHILE 1 > 0 INPUT #1, k, xp, yp IF k = 0 AND x = 0 AND y = 0 THEN CLOSE #1: CLOSE #2: END s = 0: b = 0 ks = k: y1 = 1024: x1 = 1024 DO IF b = 0 AND xp <= x1 + ks AND xp >= x1 - ks AND yp <= y1 + ks AND yp >= y1 - ks THEN s = s + 1 b=1 IF b = 1 AND xp < x1 AND yp < y1 THEN x1 = x1 - ks: y1 = y1 - ks: b = 0 IF b = 1 AND xp > x1 AND yp < y1 THEN x1 = x1 + ks: y1 = y1 - ks: b = 0 IF b = 1 AND xp < x1 AND yp > y1 THEN x1 = x1 - ks: y1 = y1 + ks: b = 0 IF b = 1 AND xp > x1 AND yp > y1 THEN x1 = x1 + ks: y1 = y1 + ks: b = 0 ks = ks \ 2 LOOP UNTIL ks = 0 PRINT #2, s WEND END 6. В секвадр аты П ре д лагае м п озн ак ом и ться с ре ш е н и е м этой зад ачи , п ре д ставле н н ы м сту д е н том Б е лгород ск ого госу д арстве н н ого те хн и че ского у н и ве рси те та и м . Ш у хова А ндр еем Новиченко #include <stdio.h> #define forr(x,y,z) for (x=(y);x<=(z);x++) #define fori(x,y,z) for (int x=(y);x<=(z);x++) 47
res := 0; if (x >= kx) and (x <= kx+2*k) and (y >= ky) and (y <= ky+2*k) then res := 1; cx := kx+k; { center } cy := ky+k; nk := k div 2; if x < cx then nx := kx-nk else nx := kx+2*k-nk;
{ new coord }
if y < cy then ny := ky-nk else ny := ky+2*k-nk; count := res + count(x, y, nx, ny, nk); end; var f, fout: Text; k, x, y: Integer; begin { read data } Assign(f, 'input.txt');
{ input.txt }
Assign(fout, 'output.txt'); { output.txt } Reset(f); Rewrite(fout); Read(f, k, x, y); repeat Writeln(fout, count(x, y, (maxx div 2) - k, (maxy div 2) - k, k)); Read(f, k, x, y); until (k=0) and (x=0) and (y=0); Close(fout); Close(f); end. 46
Белобр одскийВ .А . В ГУ , ф изф а к С идор ова М . В ГУ , П М М С околова И .В . В ГУ , П М М Ш а литкин А .А . В ГУ , П М М Ба р а нов А .В . В ГУ , П М М К а р пу ш ин А .А . В ГУ , П М М К линскихА .А . В ГУ , П М М Л огу нов С . В Г У , м а тф а к П р осин С .А . В ГУ , П М М Ш ир яев М .М . В ГУ , П М М Щ ер ба ков Е .А . В ГУ , П М М Га р ш ин И .А . В В А И Л а р ин И .А . В ГУ , П М М С вир идов А .А . В ГУ , ф изф а к С идор енко С .В . В ГУ , П М М С околов С .А . В ГУ , П М М С ор окин А .И . В ГУ , П М М Денисов А .С . В Г А С У А ндр ейчиков В .А . В ГУ , П М М Ба р а нов Е .В . В ГУ , м а тф а к Гор ьковенко В В И РЭ Ду бр овскийИ .Л . В ГУ , П М М З у ев А .С . В В И РЭ К ор жов Н.Е . В ГУ , П М М К у р ба това С .А . В ГУ , П М М М а т юш евскийК .Л . В ГУ , П М М П окор ны йВ .Д. В ГУ , П М М Ф р олов А .А . В И М В Д Ха р ченко С .А . В ГУ , П М М И ва нников М .И . В Г ТУ К ор ча гин А .И . В И М В Д К осов П .Б. В ГТА М а м едов Э .Ф . В Г У , П М М К озлов Ю .С . В И М В Д М олодкин Д.В . В В А И К у ликП . В Г У , П М М Толу ба ев А .К . В ГУ , ф изф а к Ром а нченко О .А . В ГМ А Гор лова Н .В . В ГТА П ла тонов Н. В ГТУ Л итвинов А .М . В ГТУ Тка чА .В . В ГТУ Я стр еб О . В Г У , П М М Щ епкин А .В . В Г У , истф а к Гу р ш у м ова Н.П . В Г У , ю р ф а к О м ельченко Н .А . В ГУ , хим ф а к 23
Ш евченко Д.Н. В ГМ А Бонда р енко М .В . В ГУ , биоф а к В а хтина Т.В . В ГУ , биоф а к В а хтин С .А . В ГУ , геогр .ф а к. О пеш ко О .В . В ГУ , геолф а к Я ку нин М .С . В ГП У Га ш ков М .А . В ГП У Л у щиков А .Н. В ГП У Негодяев А . В ГП У К а ш ир ин А . В ГП У Ш а та лов М .И . В ГУ , П М М Ф у р сова И . В ГП У Я нин А . В ГП У Ду р а ков Р. В ГП У Ра хлецов А .Н. В ГА С У А зна у р ьянц А .А . В ГУ , м а т.ф а к. Болот ова Е . В ГА С У Бельцевич В .В . В В А И К отляр ов М .Ю . В ГТУ Та р а сова А .С . В ГУ , П М М Бер езин А .Д. В ГУ , П М М Гу р ова М .В . В ГУ , П М М Ж окин А . В В А И З ензина К . В ГУ , П М М И ва нова В .О . В ГУ , П М М С та р оду бцев А .А . В ГУ , П М М П а ш енцева Е . В ГТА
InitFiles(); FillOrders; while ReadInput do begin Best:=1; AnalyzeComb(Hand,Deck,1); WriteCombination(Best); end; CloseFiles(); end. 4. В секвадр аты П ри вод и м е щ е од н о ре ш е н и е этой зад ачи , п ре д ложе н н ое п е рвок у рсн и к ом фак у льте та П М М В ГУ , п осту п и вш и м н а фак у льте т, как п обе д и те ль оли м п и ад ы п о и н форм ати к е д ля ш к ольн и к ов в 2003 год у , М иха илом Ш а та ловы м . { Shatalov M.I., VGU, PMM, 1 kurs } { 1. Vse kvadraty } const maxx = 2048;
Резу л ьтаты втор ог о(основного) ту р аш кол ы -ол имп иады №
Ф ИО
maxy = 2048;
Г о ро д
В УЗ
Ф ак-т
1 В ы р о стко в Д м и тр ий 2 Г айдай В икто р А л ександр о в и ч
В о р о неж В о р о неж
ВГУ ВГУ
ПМ М ПМ М
С ум м а бал л о в 11 11
3 Кл и нскихА нто нА л ександр о в и ч
В о р о неж
ВГУ
ПМ М
11
4 С о л о м ати н А л ексей Ив ано в и ч
В о р о неж
ВГУ
Ф КН
11
5 Шатал о в Михаил Иго р ев и ч
В о р о неж
ВГУ
ПМ М
11
6 Щ ер бако в Ев гени й А нато л ьев и ч
В о р о неж
ВГУ
ПМ М
10
if k < 1 then
7 Но в и ченко А ндр ей В ал ер ьев и ч 8 Кар п уш инА ндр ей А л ександр о в и ч
Бел го р о д БГ ТУ В о р о неж В Г У
Ф А Пи ИТ ПМ М
9 8
begin
9 Си до р енко С тани сл ав В л адл ено в и ч В о р о неж 10 С о р о ки нА ндр ей Иго р ев ич В о р о неж
ВГУ ВГУ
ПМ М ПМ М
8 8
11 С в и р идо в А ндр ей А л ександр о в и ч 12 Я стр еб Ол ег 13 Бабани нД м и тр ий В л ади м ир о в ич
ВГУ ВГУ ТГ ТУ
ф из ПМ М АХ П
7 7 6
В о р о неж В о р о неж Тамбо в
24
function count(x, y, kx, ky, k: Integer): Integer; var res, cx, cy, nx, ny, nk: Integer; begin
count := 0; Exit; end;
45
if Check3kind(H) then Result:=4;
14 Бар ано в А ндр ей В икто р о в ич
В о р о неж
ВГУ
if CheckStraight(H) then Result:=5;
15 З уев А л ександр С ер геев ич
В о р о неж
В ИРЭ
6
if CheckFlush(H) then Result:=6;
16 Ко зл о в Ю р и й С тани сл ав о в ич
В о р о неж
В ИМВ Д
6
if CheckFullHouse(H) then Result:=7;
17 Кр ячко в Ми хаил В икто р о в и ч
В о р о неж
ВГУ
ПМ М
6
18 Лар и н Иго р ьА л ександр о в ич
В о р о неж
ВГУ
ПМ М
6
19 Матю ш ев ский Кир ил л Л ео ни до в и ч
В о р о неж
ВГУ
ПМ М
6
20 Писар ев сий С ер гей Ю р ьев ич
В о р о неж
В Г ТУ
21 Титко в А л ексей В ал ер ьев и ч
Тамбо в
ТГ ТУ
ко нст-тех
6
if Check4kind(H) then Result:=8; if CheckStraightFlush(H) then Result:=9; end; procedure AnalyzeComb(Hand,Deck:TCs;Step:integer); var b:integer; var s:integer;
begin B:=FindMax(Hand); if b>Best then Best:=b; if Step=6 then exit; for s:=1 to 5 do
6
6
22 То л убаев А л ексей Ко нстанти но в ич
В о р о неж
ВГУ
ф из
6
23 Ш и р яев Ми хаил Михайл о в ич
В о р о неж
ВГУ
ПМ М
6
24 Безр о дны й А л ексей Нико л аев и ч
В о р о неж
В ИРЭ
25 З ахар о в А л ексей В л адим и ров и ч
Тамбо в
ТГ ТУ
ФА Х П
5
26 По го р ел енко В л адим и р
В о р о неж
ВГУ
ПММ
5
27 Ко р жо в Нико л ай Ев геньев и ч
В о р о неж
ВГУ
ПМ М
5
Ф А ПиИТ
5
28 С ахино в Ко нстантин В л ади м ир о в и ч Бел го р о д БГ ТУ
H:TC;
ПМ М
5
29 Ч ер нико в В ячесл ав Ни ко л ав ев ич
В о р о неж
В Г ТУ
30 Ло гуно в С ер чей
В о р о неж
ВГУ
31 Ф р о л о в А л ексей А ндр еев и ч
В о р о неж
В И М В Д Р Ф р адиф из.
4
32 Шал и ткин А ндр ей В л ади ми р о в ич
В о р о неж
ВГУ
ПМ М
4
33 Бер ез и н А нто н Д м итр и ев и ч
В о р о неж
ВГУ
ПМ М
3
34 Ив анни ко в Макси м Иго р ев ич
В о р о неж
В Г ТУ
ФА Э М
3
35 Д ени со в А л ександр С ер геев ич
В о р о неж
В Г АС У
5 м ат
4
2
36 Д убр о в ский Иго р ьОл его в и ч
В о р о неж
ВГУ
ПМ М
2
if not Hand[s].M then
37 Мухо едо в Дм итр и й С ер геев и ч
В о р о неж
ВГУ
ПМ М
2
begin
38 Пунин Ни ко л ай Г еннади ев ич
Тамбо в
ТГ ТУ
ФА Х П
2
H:=Hand[s];
39 С ам о ни н М ихаи л Нико л аев и ч
Тамбо в
ТГ ТУ
ко нст-тех
2
Hand[s]:=Deck[Step];
40 Х ар ченко С ер гей А л ександр о в ич
В о р о неж
ВГУ
ПМ М
2
Hand[s].M:=true;
41 Ч о п о р о в Г р иго р ий А л ександр о в и ч
В о р о неж
ВГУ
жур
2
AnalyzeComb(Hand,Deck,Step+1);
42 А ндр ейчи в о в В аси л ий А ндр еев ич
В о р о неж
ВГУ
ПМ М
1
Hand[s]:=H;
43 Баймако в А нто нА л ександр о в и ч
Бел го р о д БГ У
44 Бар ано в Ев гени й В л адим и ров и ч
В о р о неж
ВГУ
м ат
1
45 Бал абаев А
В о р о неж
ВГУ
ПМ М
1
46 Бел о бр о дский В л адим ир А ндр еев и ч В о р о неж
ВГУ
ф из
1
47 Бел тсени ч В ади м В ячесл ав о в и ч
В о р о неж
В В А ИИ
1
48 Г ар ш инИго р ьА л ександр о в и ч
В о р о неж
В В А ИИ
ги др о метео р . 1
end; end; begin 44
25
1
49 Г о р ько в енко
В о р о неж
В ИРЭ
50 Г ур о в а Мар и я В л адим и р о в на
В о р о неж
ВГУ
51 Ж о ки нА
В о р о неж
В В А ИИ
1
52 Ко жар и н А л ексей В л ади ми р о в ич
В о р о неж
В ИРЭ
1
53 Ко р чагинА л ександр Ив ано в ич
В о р о неж
В И МВ Д Р Ф р адиф и з.
1
54 Ко тл яр о в Макси м Ю р ьев и ч
В о р о неж
В Г ТУ
ФА Э М
1
55 Кур бато в а С в етл ана А л ександр о в на В о р о неж
ВГУ
ПМ М
1
56 Кул и к По л ина
В о р о неж
ВГУ
ПМ М
1
57 Мо л о дкинД м итр и й В л ади ми р о в ич
В о р о неж
В В А ИИ
ги др о м етео р . 1
58 Панё в и н С емё нВ икто р о в и ч
В о р о неж
В Г ТУ
ФА Э М
1
for k:=j+1 to 5 do
59 По ко р ны й В л адим и р Д м итр и ев и ч
В о р о неж
ВГУ
ПМ М
1
if (Hand[i].V=Hand[j].V) and
60 Пр о цук Р ената Ни ко л аев на
Тамбо в
ТГ ТУ
ФА Х П
1
(Hand[i].V=Hand[k].V) then
61 С и до р о в а Мар и на
В о р о неж
ВГУ
ПМ М
1
begin
62 С о ко л о в С ер гей А л ександр о в и ч
В о р о неж
ВГУ
ПМ М
1
Result:=true;
63 С о ко л о в а Ир и на В и кто р о в на
В о р о неж
ВГУ
ПМ М
1
V1:=Hand[i].V;
64 С тар о дубцев А нто нА л ександр о в и ч В о р о неж
ВГУ
ПМ М
1
65 Шесто п ал о в а Ел ена В икто р о в на
ВГУ
ПМ М
1
В о р о неж
ПМ М
1
function CheckFullHouse(Hand:TCs):boolean;
1
var i,j,k:integer; V1:char; begin Result:=false; for i:=1 to 5 do for j:=i+1 to 5 do
end; if Result then Result:=false
Задания втор ог оту р а Задача1 " В се квадр аты "
else exit; for i:=1 to 5 do
Рассм атри вае тся кле тчатое п оле , н а котором расп оложе н ы к вад раты со сторон ам и 2k+1, гд е k – н ату ральн ое чи сло, н азван н ое разм е ром к вад рата. Л ю бой к вад рати м е е ту н и к альн у ю точк у , н азы вае м yю це н тром . Н а к ле тчатом п оле это бу д е т од н а и з к ле ток квад рата. О п и ш е м ри су н ок и з к вад ратов, к оторы йстрои тся п о сле д у ю щ и м п рави лам .
for j:=i+1 to 5 do if (Hand[i].V=Hand[j].V) and (Hand[i].V<>V1) then Result:=true;
1. В це н тре п оля расп олагае тся к вад ратразм е ром k (1 <= k <= 512). 2. В ве рш и н ах все х квад ратов разм е ра k > 1 расп олагаю тся це н тры к вад ратов разм е ра k div 2 . (Div ре али зу е тце лочи сле н н ое д е ле н и е , так 9 div 2 = 4).
end; function FindMax(H:TCs):integer;
3. Н аи м е н ьш и й возм ожн ы й к вад рат и м е е т разм е р k=1, а н аи больш и й k=512.
begin
4. В е рхн яя ле вая к ле тк а п оля и м е е т коорд и н аты (0,0), п равая н и жн яя (2048, 2048).
if CheckPair(H) then Result:=2;
Result:=1; if Check2Pairs(H) then Result:=3;
26
43
if Orders[H[k].V]=H[l].V then //4 Result:=true; end; function CheckFlush(H:TCs):boolean; var i,j,k,l,p:integer; begin Result:=false;
Н ап и ш и те п рограм м у , которая чи тае тзн аче н и е k и к оорд и н аты к ле тк и , и оп ре д е ляе т, как м н ого к вад ратов сод е ржатд ан н у ю к ле тк у .
for i:=1 to 5 do //1 symbol for j:=1 to 5 do
В ход н ы е и вы ход н ы е д ан н ы е
if Orders[H[i].V]=H[j].V then //2 for k:= 1 to 5 do if Orders[H[j].V]=H[k].V then //3 for l:=1 to 5 do if Orders[H[k].V]=H[l].V then //4 for p:=1 to 5 do if Orders[H[l].V]=H[p].V then //5
В ход н ы е д ан н ы е бе ру тся и з те кстового файла Input.txt, к оторы й сод е ржи т н абор строк . К ажд ая строка состои т и з зн аче н и я k и це лочи сле н н ы х к оорд и н ат к ле тки , разд е ле н н ы х п робе лам и . Ф айл заве рш ае тся строкой, состоящ е й и з тре хн у ле й 0 0 0 В ы ход н ой файл Output.txt д олже н сод е ржать н абор строк , к ажд ая и з к оторы х соотве тству е т строк е вход н ы х д ан н ы х. Строк а д олжн а п ре д ставлять собой чи сло к вад ратов, сод е ржащ и хзад ан н у ю к ле тк у . П ри м е р вход н ы хд ан н ы х
Result:=true;
500 113 941
end;
000 function CheckStraightFlush(H:TCs):boolean;
П ри м е р вы ход н ы хд ан н ы х
var
5
i:integer; begin
Задача2 " И г р ок-медиум "
Result:=true; for i:=1 to 4 do if H[i].K<>H[i+1].K then Result:=false; Result:=Result and CheckFlush(H);
П ри и гре в п яти к арточн ы й п оке р, и грок п олу чае т п ри сд аче 5 карт (к оторы е он ви д и т). И грок м оже т вы броси ть от н у ля д о п яти к арт, и з те х к оторы е е м у разд али , и н абратьтак ое же к оли че ство и з колод ы , взяв карты с е е ве рха. Н е обход и м о п олу чи ть н аи больш е е коли че ство очк ов, вы п олн и в так у ю оп е раци ю . П рави ла п од сче та п ри ве д е н ы н и же . О бы чн о и грок н е м оже т ви д е ть к арты , которы е расп олагаю тся в к олод е , и д олже н и сп ользоватьве роятн остн ы е м е тод ы д ля п ри н яти я ре ш е н и я. О д н ак о в этой зад аче м ы п ре д п оложи м , что и грок облад ае т те ле п ати е й и
end;
42
27
зн ае т к арты , ле жащ и е н а ве рху колод ы к арт. Н ап и ш и те п рограм м у , к оторая сове ту е т и грок у , каки е к арты н у жн о вы броси ть, чтобы п олу чи ть м акси м альн ое к оли че ство очков.
(Hand[i].V=Hand[k].V) and (Hand[i].V=Hand[l].V)then Result:=true; end;
В ходны е и вы ходны е да нны е В ход н ы е д ан н ы е бе ру тся и з те к стового файла Input.txt, к ажд ая и з строк к оторого сод е ржи т5 карт, к оторы е п олу чи ли грок в н ачале , зате м 5 ве рхн и х к артколод ы . К ажд ая карта п ре д ставляе тсобой д ву хси м вольн ы й к од . Пе рвы й си м вол н ом и н ал карты (2-9, T=10, J=вале т, Q=д ам а, K=к ороль, A=ту з – п о возрастан и ю н ом и н ала) и второй си м вол - м асть (C=к ре сти , D=че рви , H=бу бн а, S=п и к и ). К арты разд е ляю тся од н и м п робе лом . К ажд ая строка являе тся п рави льн ой (н е тд у бли ру ю щ и хся к арт). К ажд ая строк а вы ход н ого файла Output.txt д олжн а сод е ржать м акси м альн ое чи сло очк ов (н азван и е и гровой к ом би н аци и ) д ля соотве тству ю щ е й строки вход н ого файла. В ход н ы е д ан н ы е зак ан чи ваю тся п ри зн ак ом к он ца файла. Зам е ти м , что п оряд ок н ачальн ы х карт у и грока н е важе н , од н ак о п оряд ок к арт в колод е и м е е тзн аче н и е , т.к . вы брош е н н ы е к арты зам е н яю тся картам и , ле жащ и м и в к олод е све рху . П ри м е ры и гровы х к ом би н аци й п оявляю тся в п ри м е рахвы ход н ы хд ан н ы хв п оряд ке у бы ван и я зн ачи м ости .
var Orders:array[char] of char; procedure FillOrders; var c:char; begin for c:=#0 to #255 do Orders[c]:=#0; for c:='2' to '8' do Orders[c]:=chr(ord(c)+1); Orders['9']:='T';
П ри м е р вход н ы хд ан н ы х
Orders['T']:='J';
TH JH QC QD QS QH KH AH 2S 6S
Orders['J']:='Q';
2H 2S 3H 3S 3C 2D 3D 6C 9C TH
Orders['Q']:='K';
2H 2S 3H 3S 3C 2D 9C 3D 6C TH
Orders['K']:='A';
2H AD 5H AC 7H AH 6H 9H 4H 3C
end;
AC 2D 9C 3S KD 5S 4D KS AS 4C KS AH 2H 3C 4H KC 2C TC 2D AS
function CheckStraight(H:TCs):boolean;
AH 2C 9S AD 3C QH KS JS JD KD
var
6C 9C 8C 2D 7C 2H TC 4C 9S AH
i,j,k,l:integer;
3D 5S 2H QD TD 6S KH 9H AD QH
begin
П ри м е р вы ход н ы хд ан н ы х
Result:=false;
Hand: TH JH QC QD QS Deck: QH KH AH 2S 6S Best hand: straight-flush
for i:=1 to 5 do //1 symbol
Hand: 2H 2S 3H 3S 3C Deck: 2D 3D 6C 9C TH Best hand: four-of-a-kind
for j:=1 to 5 do
Hand: 2H 2S 3H 3S 3C Deck: 2D 9C 3D 6C TH Best hand: full-house
if Orders[H[i].V]=H[j].V then //2
Hand: 2H AD 5H AC 7H Deck: AH 6H 9H 4H 3C Best hand: flush
for k:= 1 to 5 do
Hand: AC 2D 9C 3S KD Deck: 5S 4D KS AS 4C Best hand: straight
if Orders[H[j].V]=H[k].V then //3
Hand: KS AH 2H 3C 4H Deck: KC 2C TC 2D AS Best hand: three-of-a-kind
for l:=1 to 5 do
28
41
var
Hand: AH 2C 9S AD 3C Deck: QH KS JS JD KD Best hand: two-pairs
i,j,n:integer;
Hand: 6C 9C 8C 2D 7C Deck: 2H TC 4C 9S AH Best hand: one-pair
begin
Hand: 3D 5S 2H QD TD Deck: 6S KH 9H AD QH Best hand: highest-card
n:=0; for i:=1 to 5 do
П оясн е н и я:
for j:=i+1 to 5 do
straight-flush – п ятьп од ряд п о н ом и н алу к артод н ойм асти
if Hand[i].V=Hand[j].V then inc(n);
four-of-a-kind – че ты ре карты од н ого н ом и н ала
Result:=n>1;
full-house – 2 карты од н ого н ом и н ала и 3 к арты од н ого н ом и н ала
end;
flush – п ятькартп од ряд п о н ом и н алу straight – че ты ре к арты п од ряд п о н ом и н алу
function Check3kind(Hand:TCs):boolean;
three-of-a-kind - три к арты од и н ак овы хп о н ом и н алу
var
two-pairs – д ве п ары к артод и н ак овы хп о н ом и н алу
i,j,k:integer;
one-pair – п ара картод и н ак овы хп о н ом и н алу
begin
highest-card – старш ая п о н ом и н алу карта
Result:=false; И збр анны е реш ения
for i:=1 to 5 do 1. В одител и-бол ту ны
for j:=i+1 to 5 do
П ри ве д е м ре ш е н и е , п ре д ложе н н ое сту д е н том 4 к у рса фак у льте та П М М В и ктором Гайд ае м , к оторы й к ак п обе д и те льоли м п и ад ы н агражд е н и м е н н ой сти п е н д и е й О О О «РЕ Т-к ом п ью те ры »
for k:=j+1 to 5 do if (Hand[i].V=Hand[j].V) and (Hand[i].V=Hand[k].V) then Result:=true; end;
{ И д е я ре ш е н и я: строи м граф, п ок азы ваю щ и й, как и е вод и те ли общ аю тся д ру г с
function Check4kind(Hand:TCs):boolean;
д ру гом , и п рове ряе м е го н а связн ость}
var i,j,k,l:integer;
const NAME_IN = 'Input.txt';
begin
NAME_OUT = 'Output.txt'; { И м е н а вход н ого и вы ход н ого файлов }
Result:=false; for i:=1 to 5 do
TEXT_YES = 'Д а';
for j:=i+1 to 5 do
TEXT_NO = 'Н е т'; { Строк и д ля вы вод а в вы ход н ой файл}
for k:=j+1 to 5 do for l:=k+1 to 5 do
N_MAX = 20;
if (Hand[i].V=Hand[j].V) and
D_MAX = 30; 40
29
S_MAX = 50;
Hand[i].V:=AnsiUpperCase(Hand[i].V)[1];
{ М акси м альн ы е зн аче н и я п арам е тров N, D, S }
Hand[i].K:=AnsiUpperCase(Hand[i].K)[1]; Hand[i].M:=false;
type T_Arrival = record
end;
first, period : Byte;
for i:=1 to 5 do
end;
begin
{ И н форм аци я о п ри бы ти ях н е которого вод и те ля н а н е котору ю остан овк у . first - вре м я п е рвого п ри бы ти я, period - вре м я, п роход ящ е е м е жд у п ри бы ти ям и ; и н ы м и словам и , этот ти п п ок азы вае т, что вод и те ль п ри бы вае т
read(fIn,c); read(fIn,Deck[i].V,Deck[i].K); Deck[i].V:=AnsiUpperCase(Deck[i].V)[1]; Deck[i].K:=AnsiUpperCase(Deck[i].K)[1];
н а остан овк у в м ом е н ты вре м е н и period * k + first, k = 0, 1, 2, 3...
end;
Н ачалу д ви же н и я соотве тству е тн у ле войм ом е н твре м е н и .
Result:=true;
period = 0 обозн ачае т, что вод и те льн и когд а н е п ри бы вае тн а
readln(fIn);
остан овк у . }
except end; end;
var f_in, f_out : Text; { В ход н ойи вы ход н ой файлы }
var
N, D, S : Byte; { К оли че ство ли н и й, вод и те ле й, остан овок в город е }
Best:integer;
TimeTable : array [1..S_MAX, 1..D_MAX] of T_Arrival; { Расп и сан и е п ри бы ти йк ажд ого вод и те ля н а к ажд у ю остан овк у } Graph : array [1..D_MAX, 1..D_MAX] of Boolean; { Си м м е три чн ы йграф, к оторы йн ад о п рове ри тьн а связн ость.
function CheckPair(Hand:TCs):boolean; var i,j:integer;
Graph[i,j] = TRUE, е сли вод и те ли i и j п е ри од и че ск и встре чаю тся;
begin
Graph[i,j] = FALSE, е сли он и н и к огд а н е встре чаю тся. }
Result:=false;
Line : array [1..S_MAX] of Byte; { Н ом е ра остан овок н а рассм атри вае м ой в д ан н ы йм ом е н тли н и и }
for i:=1 to 5 do for j:=i+1 to 5 do if Hand[i].V=Hand[j].V then
line_s : Byte; { К оли че ство остан овок н а рассм атри вае м ой в д ан н ы й м ом е н тли н и и
Result:=true; end;
} i, j, ss, dd : Byte;
function Check2Pairs(Hand:TCs):boolean;
answer : Boolean; 30
39
close(fIn); close(fOut);
function NOD (a, b : Byte) : Byte; { В ы чи сляе тн аи больш и й общ и й д е ли те ль}
end;
begin procedure WriteCombination(Order:integer); const Combs:array[1..9] of string=(
while TRUE do if a > b then
'highest-card',
if b = 0 then break
'one-pair',
else a := a mod b
'two-pairs',
else
'three-of-a-kind',
if a = 0 then break
'straight',
else b := b mod a;
'flush',
NOD := a + b;
'full-house',
end;
'four-of-a-kind', 'straight-flush');
BEGIN { И н и ци али заци я файлов }
begin
assign (f_in, NAME_IN);
writeln(fOut,Combs[Order]);
assign (f_out, NAME_OUT);
end;
reset (f_in); rewrite (f_out); { Ц и к л - обрабаты вае м город а п о оче ре д и , п ока н е встре ти м п ри зн ак к он ца файла
function ReadInput():boolean; var
N= 0 }
i:integer;
repeat
c:char;
{ Счи ты вае м п арам е тры N, D, S }
begin
readln (f_in, N, D, S);
Result:=false;
if N <> 0 then
if eof(fIn) then exit;
begin
try
{ Зап олн яе м п о оче ре д н ом у блок у строк расп и сан и е TimeTable }
for i:=1 to 5 do
{ О чи стк а расп и сан и я: у стан авли вае м всю д у period = 0 }
begin
for i := 1 to S do
if i>1 then read(fIn,c);
for j := 1 to D do
read(fIn,Hand[i].V,Hand[i].K); 38
31
TimeTable[i,j].period := 0; for i := 1 to N do { Счи ты вае м и з файла и н форм аци ю об оче ре д н ой ли н и и и зан оси м е ё в расп и сан и е }
3. И г р ок-медиу м П ре д ставляе м ре ш е н и е зад ачи , п ре д ложе н н ое м аги стран том второго год а обу че н и я А нтоном К линских, акти вн ы м у частн и к ом и п ри зе ром ре ги он альн ы хсту д е н че ск и холи м п и ад . program Cards;
begin { Счи ты вае м сп и сок остан овок }
{$APPTYPE CONSOLE}
line_s := 0; while not eoln (f_in) do
uses
begin
SysUtils;
inc (line_s); read (f_in, Line[line_s]);
type
end;
TC=record
readln (f_in); { Счи ты вае м и н форм аци ю о вод и те ляхн а этой ли н и и }
V:char; // nominal
while not eoln (f_in) do
K:char; // mast
begin
M:boolean; // was changed
read (f_in, ss, dd);
end;
{ dd - н ом е р вод и те ля, ss - н ом е р остан овк и , скоторойон н ачи н ае тд ви же н и е }
TCs=array[1..5] of TC; var
{ О п ре д е ляе м , к ак ойп о счёту являе тся остан овк а ss н а ли н и и }
fIn,fOut:TextFile;
for j := 1 to line_s do
Hand,Deck:TCs;
if Line[line_s] = ss then procedure InitFiles();
break; ss := j;
begin
{ Зан оси м в расп и сан и е и н форм аци ю о п ри бы ти ях вод и те ля dd
assignfile(fIn,'input.txt');
на
reset(fIn); все остан овки ли н и и }
assignfile(fOut,'output.txt');
for j := 1 to line_s do
rewrite(fOut);
with TimeTable[Line[j],dd] do
end;
begin period := line_s;
procedure CloseFiles();
first := (line_s + j - ss) mod line_s;
begin
end; 32
37
begin
end;
k.x := MID; k.y := MID; size := n;
readln (f_in);
pntcount := 0;
end; { Зап олн яе м п о расп и сан и ю TimeTable граф Graph }
while (size > 0) do begin if (d.x = k.x) or (d.y = k.y) then begin CheckCurPoint;
{ О чи стк а графа } for i := 1 to D do
break; {больш е к вад ратов н е бу д е т!!! - ле жи тн а це н тр. ли н и и } end else begin
for j := 1 to D do Graph[i,j] := FALSE;
if (d.x > k.x) then k1.x := k.x + size else k1.x := k.x - size;
for dd := 1 to (D - 1) do
if (d.y > k.y) then k1.y := k.y + size else k1.y := k.y - size;
{ О п ре д е ляе м , с к е м общ ае тся вод и те льdd }
CheckCurPoint;
for ss := 1 to S do { О п ре д е ляе м , ск е м dd общ ае тся п ри встре чахн а остан овк е ss
size := size div 2;
(е сли он там вообщ е бы вае т) }
k := k1; end;
if TimeTable[ss,dd].period <> 0 then
end;
for j := (dd + 1) to D do { П рове ряе м , общ ае тся ли вод и те ль j с вод и те ле м dd н а остан овк е ss (оп ятьже , е сли j там вообщ е бы вае т). Н ам и зве стн а и н форм аци я о п ри бы ти яхобои хвод и те ле й, j и dd, н а остан овк у ss. Н ад о у зн ать, ок ажу тся ли он и в к ак ой-то м ом е н т вре м е н и н а д ан н ой остан овке од н овре м е н н о (е сли он и встре тятся од н ажд ы , то п отом бу д у т встре чаться ре гу лярн о). Д ля этого н ад о у зн ать, и м е е тли у равн е н и е A * x + B = C * y + D це лы е ре ш е н и я, гд е А и B соотве тстве н н о – п ром е жу ток м е жд у п ри бы ти ям и и вре м я п е рвого п ри бы ти я вод и те ля j, С и D - п ром е жу ток м е жд у п ри бы ти ям и и вре м я п е рвого п ри бы ти я вод и те ля dd.
GetSquareNum := pntcount; end; begin clrscr; assign(fi, 'input.txt'); assign(fo, 'output.txt');
Согласн о п рави лу Д и офан та, це лы е ре ш е н и я бу д у ттогд а и только тогд а, к огд а |B - D| д е ли тся н а Н О Д (|A|, |C|). }
reset(fi); rewrite(fo); read(fi, n); read(fi, d.x); readln(fi, d.y); while ((n <> 0) or (d.x <> 0) or (d.y <> 0)) do begin
if (TimeTable[ss,j].period <> 0) and (
writeln(fo, GetSquareNum);
abs (TimeTable[ss,j].first - TimeTable[ss,dd].first)
read(fi, n); read(fi, d.x); readln(fi, d.y);
mod
end;
NOD (TimeTable[ss,j].period,
close(fi); close(fo);
TimeTable[ss,dd].period)
writeln('В ы п олн е н и е п рограм м ы заве рш е н о, см отри файлoutput.txt'); end.
= 0) then { Е сли вод и те ли встре чаю тся, свяже м и хв графе ре бром }
36
33
2. В секвадр аты
begin Graph[dd,j] := TRUE; Graph[j,dd] := TRUE; end;
П ри вод и м ре ш е н и е , п ре д ложе н н ое сту д е н том 4 к у рса фак у льте та П М М В ГУ Дмитр ием В ы р остковы м , которы й как п обе д и те ль оли м п и ад ы вы и гры вае т в те че н и е п осле д н и х д ву х ле т и м е н н у ю сти п е н д и ю ком п ан и и «И н форм связь-Че рн озе м ье »
{ П рове ряе м связн остьграфа Graph }
{В Ы РО СТК О В Д .
{ Строи м тран зи ти вн ое зам ы кан и е графа п о алгори тм у У орш алла }
В ГУ , П М М , 4 к у рс, 8-я гру п п а }
for i := 1 to D do
uses crt;
for j := 1 to D do
type
if Graph[j,i] then
point = record
for dd := 1 to D do
x, y : integer;
Graph[j,dd] := Graph[j,dd] or Graph[i,dd]; { Те п е рь п рове ряе м связн ость п олу че н н ого зам ы к ан и я - это сд е лать куд а
end; const MID = 1024; {це н тральн ая точк а}
ле гче } answer := TRUE;
var
for i := 2 to D do
n : integer; {разм е р н аи больш е го к вад рата}
if not Graph[1,i] then
d : point; {и ск ом ая кле тк а}
begin
fi, fo : text;
answer := FALSE; break;
function GetSquareNum : integer; {integer - бу д е тд остаточн о}
end;
var size : integer; {разм е р те к у щ е го к вад рата} pntcount : integer; {су м м и рован и е н ак ры ваю щ и хк вад ратов} k, k1 : point;{стары й це н тр точки и н овы й це н тр (бли жайш и й к и ском ой к ле тк е )}
{ В ы вод ре зу льтата } if answer then writeln (f_out, TEXT_YES) else
procedure CheckCurPoint;
writeln (f_out, TEXT_NO)
begin
end;
if (d.x <= k.x + size) and (d.x >= k.x - size)
until N = 0; { Заве рш е н и е работы }
and (d.y <= k.y + size) and (d.y >= k.y - size) then inc(pntcount);
close (f_in);
end;
close (f_out); END. 34
35
72
69
70
71