• Авторизация


Московская олимпиада по информатике за 4 остановки. 14-12-2007 15:25 к комментариям - к полной версии - понравилось!


9 Декабря прошла московская олимпиада по информатике. Я в ней не участвовал, просто нужно решить одну задачу для зачета в институте. Знали б вы как там учат. :'(


Мне вопросы показались простыми: пока ехал в метро 4 остановки понял, как решаются задачи, т.е. составил примерный алгоритм решения.

На написание программ на компьютере ушло часа 3.
Сказали, что можно писать на любом языке кроме С++. :(
Думаю половина времени ушла на вспоминание паскаля: работы с массивами, вспоминание языковых конструкций. Как оказалось фигурные скобки обозначают комментарий. А я то думал, чего эт он не работает ;)

Паскаль хоть и кривой, но я его лучше знаю после С++ из компании компилируемых языков.
Может надо было на php написать? было бы прикольно :)

Задачки старался решать более изощренными методами.
Во второй не использовал циклов.
В четвертой решил использовать способ из недавно изученной сортировки.
Плюс оптимизация во всех задачах: не люблю много кода и бездействующие переменные.
Потому что по-обычному не интересно :)

ЗАДАЧИ:

[699x484]
[699x483]


РЕШЕНИЯ:

Задача A

program worka;
var
a,b,l,N,size:integer;
begin

a:=2; b:=1; l:=3; N:=4;

size:=a+(N-1)*(a*2+b*2)+l*2;
writeln(size);

end.





Задача B

program workb;
var
a,b,c,d,t:integer;
r,x,y:integer;
begin
{a:=3; b:=6; c:=2; d:=9;}
a:=3; b:=1; c:=5; d:=9;
{/*writeln(a,b,c,d);*/}

if(a>b) then begin t:=a; a:=b; b:=t; end;
{/*writeln(a,b,c,d);*/}
if(c>d) then begin t:=c; c:=d; d:=t; end;
writeln('r');
writeln(a,b,c,d);

t:=0;

if((a>=c) and (a<=d)) then begin t:=1; x:=a; end;
if((b>=c) and (b<=d)) then begin t:=t+2; y:=b; end;


if(t=3) then r:=(b-a+1);
if(t=2) then r:=b-c+1;
if(t=1) then r:=d-a+1;
if(t=0) then r:=0;

write('result: ');
writeln(r);
readln(r);

end.

Задача C

program workc;
var
s,st,r:string;
ss,i,t:integer;
begin
{s:='shacnidw';}
s:='Aabrrbaacda';
ss:=length(s);

for i:=1 to ss+1 do
begin
t:=i mod 2;
if(t=0) then begin
t:=i-1 div 2;
insert(s[i-1], r, t);
{writeln(r);}
{r[i/2]:=s[i];}
t:=0;
end;
if(t=1) then begin
t:=(ss div 2)+(i-1 div 2);
insert(s[i-1], st, 0);
{writeln(st);}
end;

end;

r:=r+st;

writeln(r);
readln(s);

end.


Задача D

program workd;
var
a:array[1..10] of integer;
{s=array[1..4] of char;}
i,k:integer;
{s[4]:string;}
label itos, n, rn;
begin
i:=1513;
itos:
k:=i mod 10; i:=i div 10;
a[k]:=a[k]+1; {a[k]+1;}
if(i>0) then goto itos;

for k:=0 to 10 do begin

if(a[k]=0) then goto n;
rn:
i:=i*10+k; a[k]:=a[k]-1;
if(a[k]>0) then goto rn;
n:
end;

write('result: ');
writeln(i);
readln(i);

end.


Задача E

program worke;
var
i,k,m,r,t,j,x,y:integer;
a: array[0..6] of integer;
begin
i:=6;
a[0]:=4;
a[1]:=4;
a[2]:=1;
a[3]:=5;
a[4]:=1;
a[5]:=3;

writeln('Start:');

for k:=0 to i-1 do begin
t:=0;
for j:=0 to i-1 do begin

x:=k-j; y:=j-k;
if(x<0) then x:=x+i;
if(y<0) then y:=y+i;
if(x>y) then x:=y;
write(j, ':', a[j]*x, ' ');
t:=t+a[j]*x;
end;
writeln('op:', k, '=', t);
if((k=0) or (t< m)) then begin m:=t; r:=k; end;
end;

write('Result ', r, ' (', m, ')');
readln(i);
end.
вверх^ к полной версии понравилось! в evernote
Комментарии (2):
23-12-2007-12:58 удалить
На "Детском портале" (www.mosteens.ru) сейчас идет олимпиада детского портала по программированию. Там первые пять мест призуются компами. Первое место - каким-то очень навороченым. Задания открыты. Сделать нужно до февраля. Слабо? :-)))
mikelsv 23-12-2007-13:15 удалить
Так я же не дитя?
Ух, нифига себе задачки. Не то что эти. Там без мозга никуда.


Комментарии (2): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Московская олимпиада по информатике за 4 остановки. | mikelsv - Дневник mikelsv | Лента друзей mikelsv / Полная версия Добавить в друзья Страницы: раньше»