Вы находитесь на странице: 1из 6

Районная олимпиада 2007 год

5 задание

Задача 5 Площади фигур


Имеется квадратный лист бумаги, площадь которого равна S1. Требуется
определить, можно ли вырезать из него круг, имеющий площадь S2

s1 –площадь квадрата
s2 –площадь круга
а1 – сторона квадрата
а2 – диаметр круга

program o5;
var s1,s2,a1,a2:real;
begin
writeln('vvod s1 s2');
readln (s1, s2);
a1:=sqrt(s1);
a2:=2*sqrt(s2/pi);
if round(a1)=round(a2) then writeln('yes');
end.

Output
vvod s1 s2
4 3.14
yes

1 задание
Задача 1 Алгоритм Евклида
Дима недавно начал изучать информатику. Один из первых алгоритмов, который он
узнал — алгоритм Евклида нахождения наибольшего общего делителя (НОД) двух чисел.
Напомним, что наибольшим общим делителем чисел а и b называется наибольшее
натуральное число х, такое что и а, и b делятся на него без остатка.
Алгоритм Евклида состоит в следующем:
1. Пусть a, b — числа, НОД которых надо найти.
2. Если b = 0, а — искомый НОД.
3. Если b > а, поменять а и b местами.
4. Присвоить а значение а-b.
5. Вернуться к шагу 2.
Дима уже попрактиковался в применении этого алгоритма и вычислил с его
помощью не одну сотню наибольших общих делителей. Однако просто вычислять ему
скоро надоело. Теперь он размышляет над новой задачей. Пусть заданы числа а, b, с и d.
Требуется узнать, будет ли в процессе применения алгоритма Евклида к паре чисел
(а, b) (\ < a, b < 1018) такой момент, что перед шагом 2 алгоритма а будет равно с, а b —
равно d.

program o1;
var a,b,c,d,z,nod:real;
begin
writeln('vvod a,b,c,d');
readln (a,b,c,d);
repeat

1
if b>a then
begin
z:=a;
a:=b;
b:=z;
end;
a:=a-b;
if (a=c) and (b=d) then writeln ('a=c=',a,' b=d=',b);
until b=0;
nod:=a;
writeln('nod=',nod);
end.

═ Output
vvod a,b,c,d
8444
a=c= 4.0000000000E+00 b=d= 4.0000000000E+00
nod= 4.0000000000E+00

2 задание

Задача 2 Скобочки
Строка, состоящая из символов «(« и «)» называется скобочной
последовательностью. Скобочная последовательность называется правильной, если она
может быть получена из некоторого корректного арифметического выражения удалением
всех символов кроме скобок. Например, правильная скобочная последовательность « (
() ) () » может быть получена из выражения « (2- (3+4) * 6) * (1 + 1)».
Другое определение правильной скобочной последовательности можно дать
следующим образом:
1. Пустая строка является правильной скобочной последовательностью.
2. Если S — правильная скобочная последовательность, то {S) — тоже
правильная скобочная последовательность,
3. Если S и Т — правильные скобочные последовательности, то ST —
правильная скобочная последовательность.
Глубиной правильной скобочной последовательности называется максимальная
разность между количеством открывающихся и закрывающихся скобок в префиксе
последовательности. Например, глубина последовательности « () () ( () ) » равна двум
(префикс: « () {) ( (» имеет 4 открывающихся и 2 закрывающихся скобки).
Требуется по заданным п и к найти количество правильных скобочных
последовательностей с п открывающимися скобками, которые имеют глубину к.

n – открывающих или закрывающих скобок в правильных скобочных


последовательностях
k – глубина – количество подряд идущих открывающих или закрывающих
z1 – количество вариантов постепенным перемещением
например k=2, n=3
(( )) ( ), ( ) (( ))
z2 – другие варианты
(( ) ( ))
Выписав возможные варианты, составим таблицу

2
выведем формулу
z1=n-k+1
z=z1+z2
z2 не вывести

Другой способ

K N n-k Z1 z2
2 2 0 1 0
2 3 1 2 1
3 4 1 2 1
1 3 2 3 0
2 4 2 3 4
2 5 3 4 8
3 6 3 4 >9
2 6 4 5
1. ввести N и K
2. Обозначить “(“ - 1, “)” - 0
3. перебрать все возможные перестановки из двух элементов в группах длиной N*2 и
занести в массив из этих перестановок (алгоритм не знаю)
4. рассматривая каждый элемент полученного массива, выбрать и посчитать
количество вариантов, когда
(количество 0 равно количеству 1) и
(количество идущих подряд 1 равно K или количество идущих подряд 0 равно K)

кол-во 1=сумме элементов массива


кол-во 0=2*N-сумма элементов массива

4 задание

Задача 4 Покраска забора


Фермер Петр огородил свое новое пастбище отличным забором, состоящим из п (1
< п < 2000) досок. Забор имеет форму замкнутой ломаной.
К сожалению, некоторые из этих досок покрашены в белый цвет, а некоторые —
нет. Разумеется, фермер хочет, чтобы его пастбище было огорожено красивым забором,
поэтому он решил покрасить все доски в белый цвет.
Для покраски он решил нанять компанию «Вася и Маляры», расположенную в
соседнем поселке. Компания принимает заказы на покраску участков забора. Каждый
заказ должен быть выбран из множества предложений компании. Каждое предложение
характеризуется количеством раскрашиваемых досок а, и стоимостью с, и заключается в
том, что за сумму с, рублей маляры покрасят любые а, идущих подряд досок в белый
цвет. Общее количество предложений не превышает 40.
Требуется определить, за какую минимальную сумму фермер Петр может
добиться того, что весь забор будет покрашен в белый цвет. Доску разрешается красить в
белый цвет сколько угодно раз, при этом уже окрашенные доски заново красить не
требуется (хотя разрешается), а еще не окрашенные надо обязательно покрасить.

d – массив досок в заборе


1- некрашеные доски, 0 - крашеные
n – количество досок в заборе
j – порядковый номер доски в заборе

3
jmin1, jmax1 – массивы минимальных и максимальных индексов в последовательностях
некрашеных досок
к – порядковый номер последовательности некрашеных досок
f – значение суммы (количества) в последовательности некрашеных досок
d1 – массив сумм (количеств) в последовательностях некрашеных досок
maxd1 – максимальная последовательность некрашеных досок
jminm, jmaxm – ее индексы
st – стоимость заказа
a – массив окраса количеств досок в зависимости отпредложения
с – массив стоимости предложений
Задача решена в упрощенном варианте:
Есть забор с крашеными и некрашеными досками. Есть 3 коммерческих предложения
окраса досок подряд. Найти максимальную последовательность некрашеных досок и
узнать стоимость ее покраски.

program o4;
var n,i,j,k,jmax:integer;
f,maxd1,jminm,jmaxm,st: integer;
a:array [1..40] of integer;
c:array [1..40] of integer;
d,jmin1,jmax1:array [1..2000] of integer;
d1:array[1..1000] of integer;
begin
writeln('vvod n');
readln (n);
for j:=1 to n do
begin
writeln('vvod d[j]');
readln (d[j]);
end;
for i:=1 to 3 do
begin
writeln('vvod a[i], c[i]');
readln (a[i], c[i]);
end;
k:=1;
f:=0;
for j:=1 to n do
begin
if d[j]=1 then
begin
jmax:=j;
f:=f+d[j];
end
else
begin
d1[k]:=f;
f:=0;
jmax1[k]:=jmax;
inc(k);
end;
end;

4
d1[k]:=f;
jmax1[k]:=jmax;
maxd1:=0;
for n:=1 to k do
begin
if d1[n]>maxd1 then
begin
jmin1[n]:=jmax1[n]-d1[n]+1;
maxd1:=d1[n];jminm:=jmin1[n]; jmaxm:=jmax1[n];
writeln('maxd1=',maxd1,' jminm=',jminm,' jmaxm=',jmaxm);
end;
end;
for i:=1 to 3 do
begin
if
(maxd1=n) and ((maxd1 div a[i])>0) then
begin
st:=(maxd1 div a[i])*c[i]+(maxd1 mod a[i])*c[(maxd1 mod a[i])];
writeln('st=',st);
end;
end;
end.

Output
Vvod n
6
vvod d[j]
0
vvod d[j]
1
vvod d[j]
1
vvod d[j]
1
vvod d[j]
0
vvod d[j]
1
vvod a[i], c[i]
35
vvod a[i], c[i]
57
vvod a[i], c[i]
10 10
maxd1=3 jminm=2 jmaxm=4
1
st=5

Чтобы решить олимпиадную задачу, возможно, нужно далее выяснять максимальные


количества некрашеных досок слева и справа, а также минимальные количества крашеных
от нашего максимума и двигаясь в найденном направлении добавлять доски.

5
Задача 3 Радио
Как известно, при распространении радиоволн возникает интерференция,
поэтому если рядом расположены две радиопередающие станции, вещающие на одной и
той же частоте, то качество радиопередач резко снижается. Радиостанция «Радио
Информатика» планирует транслировать свои программы во Флатландии. Министерство
связи выдало радиостанции лицензию на вещание на двух различных частотах.
Компания имеет возможность транслировать свои радиопрограммы с п
радиовышек, расположенных в различных точках страны. Для осуществления
трансляции на каждой радиовышке требуется установить специальный трансмиттер.
Каждый трансмиттер можно настроить на одну из двух частот, выделенных
радиостанции. Кроме частоты вещания, трансмиттер характеризуется также своей
мощностью. Чем мощнее трансмиттер, тем на большее расстояние он распространяет
радиоволны. Для простоты, предположим, что трансмиттер мощности R распространяет
радиоволны на расстояние R километров.
Все трансмиттеры, установленные на вышках, должны, согласно инструкции
министерства, иметь одну и ту же мощность. Чтобы программы радиостанции могли
приниматься на как можно большей территории, мощность передатчиков должна быть как
можно больше. С другой стороны, радиостанция хочет, чтобы прием передач были
качественными на всей территории Флатландии. Прием передач считается качественным,
если не существует такого участка ненулевой площади, на который радиоволны
радиостанции «Радио Информатика» приходят на одной частоте одновременно с двух
вышек.
Даны координаты вышек. Требуется определить, какую максимальную
мощность можно установить на всех трансмиттерах, чтобы можно было выбрать на
каждом трансмиттере одну из двух частот передачи так, чтобы прием был качественным
на всей территории Флатландии.