Решения олимпиадных задач (муниципальный уровень)

advertisement
Уляшева Лидия Александровна, учитель информатики УТЛ.
В работе приводятся условия задач олимпиады 2012 муниципального уровня и их решения на
языке ТурбоПаскаль. Решения авторские. С данной работой я выступила на ГМО информатики в
декабре 2012 г. Работа полезна для учащихся, принимающих участие в олимпиадах по
информатике, а также учителям, которые курируют подготовку «олимпиадников».
Задача Аквариум
В главном офисе МОЗГ (межгалактический отдел головоломок) стоит огромный
аквариум в форме шара радиуса R со срезанным сверху шаровым сегментом высоты H.
Новому межгалактическому завхозу поручили поменять всю воду. Требуется помочь завхозу
- найти объем аквариума.
Формат входного файла input.txt
Два вещественных числа: R и H (0<=H<=R)
Формат выходного файла output.txt
Объем аквариума, округленный до двух знаков.
Пример: input.txt
output.txt
70 6
1429064.42
Решение задачи Аквариум
var v,v1,e,t,r,h,dx,x,r2:real;
n, i: integer;
begin read(r, h); n:=10;v:=0;e:=0.01;dx:=(2*r-h)/n;
repeat v1:=0; x:=-r;
for i:=1 to n do
begin r2:=r*r-sqr(x+dx/2);
v1:=v1+pi*r2*dx; x:=x+dx;
end;
t:=abs(v-v1);
if t>e then begin v:=v1; n:=2*n; dx:=dx/2 end;
until t<e;
writeln('v=',v:8:2);
end.
Задача Экстрасенсорика
Ученые из МОЗГ очень интересуются возможностями одноименного органа. Они
очень близки к прорыву. Один из добровольцев уже в течение недели принимает препарат,
который позволяет ему читать мысли другого человека. И сегодня первый день серьезных
испытаний.
Компьютер выдаст на монитор одному из участников проекта до 100000 целых
чисел, которые нужно прочесть про себя. В этот же момент доброволец будет пытаться
считать эти числа из головы первого, а потом записать до 1000 чисел, которые запомнил.
Необходимо узнать результаты теста, чтобы продолжить испытания.
Необходимо найти количество угаданных чисел из первого набора.
Формат входного файла input.txt
В первой строке целые числа и M (0<=N<=100000, 0<=M<=1000)ю
Во второй строке N исходных чисел.
Во третьей строке M чисел, которые назвал доброволец.
Формат выходного файла output.txt
Количество угаданных чисел.
Пример: input.txt
10 5
10 9 8 7 6 1 2 3 4 5 3 1 5 11 7
3 1 5 11 7
output.txt
4
Решение задачи Экстрасенсорика
var n:longint;m,k,a,i,j,min,bf:integer; f:text; flag:boolean;
b:array [1..1000] of integer; {предположения}
begin
write('n,m?'); readln(n,m); assign(f,'inout.txt');rewrite(f);
readln(a);min:=a-1; writeln(f,a); writeln('Введите исходный набор');
for i:=1 to n-1 do begin readln(a); writeln(f,a)end; close(f);
writeln('Введите предположения');for i:=1 to m do readln(b[i]);
repeat flag:=true;
for i:=1 to m-1 do
if b[i]> b[i+1] then begin bf:= b[i+1]; b[i+1]:=b[i];
b[i]:=bf; flag:=false end;
until flag;
for i:=1 to m do write(b[i]:3);
{удаление кратных элементов}
{ for i:=1 to m-1 do
if b[i]= b[i+1] then b[i]:=min; }
reset(f); i:=1;j:=1;k:=0;
repeat
readln(f,a); if a=b[j] then begin inc(k);inc(i); inc(j) end;
if a<b[j] then inc(i);
if a>b[j] then inc(j);
until (i>=n) or (j>=m); close(f);
writeln ('число совпадений ',k);
end.
Задача
Участки на Уране
Уран наконец-то освоен! МОЗГу удалось и на этой мертвой планете поставить
нужные преобразователи. Теперь и на этой планете можно проводить некоторое время без
вреда для здоровья. Чем и решили воспользоваться межпланетные турфирмы. Фирма «С
нами хоть на Луну» решила потратить весь свой фонд на покупку квадратных участков на
Уране. Чтобы не потерять в прибыли, нужно потратить весь фонд до монеты, а чтобы не
иметь дело с Межпланетной налогово-таможенной службой, было бы здорово купить
наименьшее количество участков. Цена 1 кв. м планеты – 1 монета.
Помогите турфирме решить проблему!
Формат входного файла input.txt
Целое число N (0<=N<=100) – число монет в турфирме.
Формат выходного файла output.txt
Минимальное количество квадратных участков, которое можно купить, потратив все эти
деньги.
Пример: input.txt
output.txt
15
4
Решение задачи Урания
var n,k,a:integer;
begin
read(n); k:=0;
repeat a:=trunc(sqrt(n)); k:=k+n div (a*a);
n:=n mod (a*a);
until n=0;
writeln('участков:',k);
end.
Задача
Палиндром
На одной из круглых планет аборигены гордятся своей симметричностью и
придерживаются ее во всем. Слова на этой планете состоят исключительно из
палиндромав – слов, которые одинаково читаются справа налево и слева направо, например,
топор, ротор, казак. МОЗГ хочет наладить отношения с этой планетой, для этого слова
английского языка надо привести к симметричному виду, добавив справа минимальное
количество букв. Помогите МОЗГу решить проблему!
Формат входного файла input.txt
Строка S длиной до 200 символов из заглавных латинских букв.
Формат выходного файла output.txt
Строка - палинром минимальной длины, начало которой полностью совпадает с исходной строкой
S.
Пример: input.txt
output.txt
ABC
ABCBA
Решение задачи Палиндром
var s1,s:string;l,i,j: integer;flag: boolean;
function pal(s:string): boolean;
var l,i,l2: byte; f:boolean;
begin l:=length(s);l2:=l div 2;f:=true;
for i:=1 to l2 do
if s[i]<>s[l+1-i] then f:=false; pal:=f;
end;
begin readln(s); l:=length(s);
i:=1;
repeat
s1:=copy(s,i,l-i+1); flag:=pal(s1);
if not flag then i:=i+1;
until flag;
for j:=i-1 downto 1 do s:=s+ s[j];
writeln (s);
end.
Задача
Щит
Многие из планетарных союзов заказыват МОЗГу разработку сторожевого щита из
ультраплотной плазмы, который бы плотно примыкал ко всем планетам союза (см. рис.). В
каждом союзе все планеты имеют одинаковый радиус.
Дано количество планет в союзе и их радиус. Необходимо определить периметр
сторожевого щита с минимальными затратами плазы.
Формат входного файла input.txt
В первой строке: целое число N (0<=N<= 100) –число планет, R- радиус планет.
В последующих N строках – координаты центров планет.
Формат выходного файла output.txt
Длина сечения щита, вещественное число, округленное до двух знаков.
Пример: input.txt
41
0.0 0.0
2.0 0.0
0.0 2.0
2.2 2.2
output.txt
14.28
Решение задачи Щит
var n,i:integer;r,p:real;
x,y:array[1..1001] of real;
begin
write('n=');read(n); writeln('r=');readln(r);
for i:=1 to n do
begin write(i,') x,y=');readln(x[i],y[i]) end;
p:=2*pi*r; x[n+1]:=x[1]; y[n+1]:=y[1];
for i:=1 to n do
p:=p+ sqrt(sqr(x[i+1]-x[i])+sqr(y[i+1]-y[i]));
writeln('p=', p:8:3);
end.
Download