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.