Гомельская областная олимпиада школьников по информатике

advertisement
Гомельская областная олимпиада школьников по информатике.
(9 января 2003 г.)
5-8 класс. День 1.
Для всех задач: ввод с клавиатуры, вывод на экран, время на тест - 2
секунды.
Задача 1 “Груз” (5 баллов)
Бригада из N человек носили мешки с мукой. Каждый человек перенес Ai
кг муки.
Сколько кг муки перенесла вся бригада.
На входе все числа натуральные, не превосходящие 1000.
Входные данные:
N
A1
A2
...
An
Выходные данные:
S – количество муки,
перенесённое бригадой.
Пример ввода:
3
100
200
300
Пример вывода:
600
Задача 2 “ Грибники” (5 баллов)
N грибников пошли в лес за грибами. Каждый нашел Ai грибов.
Найдите номер грибника, который нашел больше всех грибов и какое
минимальное количество
грибов нужно насобирать грибнику, который насобирал меньше всех,
чтобы обогнать самого лучшего грибника?
На входе все числа натуральные, не превосходящие 1000.
Входные данные:
N
A1
A2
...
An
Выходные данные:
T - номер грибника, который нашел больше всех
грибов.
K - минимальное количество грибов, которое нужно
насобирать грибнику, который насобирал
меньше всех, чтобы обогнать самого лучшего
грибника.
Пример ввода:
4
5
2
3
1
Пример вывода:
1
5
Задача 3 “Игра” (15 баллов)
Петя придумал новую игру. Он на песке написал предложение (S), а рядом
он написал слово(S1).
Он хочет узнать, сколько в предложении (S) слов (S1).
Но нужно узнать не только, сколько слов, а еще номер позиции их начала.
Причем одну и ту же букву в 2-х словах использовать нельзя.
Гарантируется однозначность тестов.
Длины исходных слова и предложения не превосходят 255 символов.
Формат ввода:
S
S1
Формат вывода:
N - количество слов(S1) в предложении(S).
Pos1
Pos2 - номера позиции начала найденного i-го слова.
Пример ввода:
seresserres
ser
...
Posn
Пример вывода:
2
1
6
Задача 4 “Магазин” (15 баллов)
В одной деревне построили сеть фирменных магазинов.
Она представлена в виде отрезка с началом в точке (X1 Y1), и концом в
точке (X2 Y2).
Местным жителям понравился один магазин, который находится в
середине отрезка магазинов.
Вскоре жители поспорили, чей дом ближе.
Помогите им.
Известны координаты домов всех жителей (XX YY), а также количество
жителей (N).
Выведите номер ближайшего дома.
Если их несколько выведите первый в порядке
появления во входном
файле.
Ограничения:
1<=N<=1000
Все координаты целые и меньше 10000
Формат ввода:
N - количество домов
X1 Y1 - координаты концов отрезка, представляющего
X2 Y2 собой сеть магазинов.
XX[1] YY[1]
XX[2] YY[2] - координаты домов жителей.
...
XX[N] YY[N]
Формат вывода:
K - номер ближайшего к любимому магазину дома.
Пример ввода:
4
11
44
10 10
31
10 11
15 51
Пример вывода:
2
Задача 5 “Индиана Джонс”
Индиана Джонс нашел карту лабиринта (размером N*M). Лабиринт
заполнен различными монстрами.
У Индианы Джонса есть биологическое оружие, которое может убить K
видов монстров.
Индиана Джонс находится в точке (X1 Y1), а выход в точке (X2 Y2).
Сможет ли Джонс выйти из лабиринта.
Чтобы перейти из комнаты(1) в другую комнату(2) нужно уничтожить
монстра в комнате(2).
На клетки, в которой Джонс уже был идти нельзя т.к. он их заминировал.
Ходить можно только по вертикали и горизонтали
на одну клетку. В точке (X1 Y1) монстры безобидные. Нужно узнать
сможет или нет Джонс выйти, и, если сможет,
нужно узнать какое минимальное количество ходов, которое он сделает
прежде чем выйдет.
Монстры могут обозначаться любым одним символом.
Ограничения:
N, M<=100
K<=255
Формат ввода:
X 1 Y1
X 2 Y2
NM
K
L1 L2 … Lk
A11A12…A1m
A21A22…A2m
… - описание лабиринта.
An1An2…A1m
Где
L – Виды монстров
Которых может уничтожить
биологическое оружие Индианы
Джонса.
Формат вывода:
No/Yes Kol – минимальное
количество ходов, которое сделает
Индиана Джонс,
прежде чем выйдет.
Пример ввода:
1 1
3 3
3 3
2
x y
1xx
wxy
7yy
Пример вывод
Yes 4
Задача 6 “Числа” (30 баллов)
Детям задали на дом задание:
Есть множество из N натуральных чисел.
Сколькими способами можно разложить число K в сумму чисел из этого
множества.
Каждое число из ряда можно использовать неограниченное число раз.
На входе все числа натуральные, не превосходящие 500.
Формат ввода:
NK
A1
A2 - числа из заданного
…
множества
An
Формат вывода:
R - количество способов
разложения числа K
Пример ввода:
36
1
2
3
Пример вывода:
7
Все возможные вариан
3+3
1+2+3
2+2+2
1+1+1+3
1+1+2+2
1+1+1+1+2
1+1+1+1+1+1
Гомельская областная олимпиада школьников по информатике.
9 января 2003г. - 5-8 класс. День 2.
Для всех задач: ввод с клавиатуры, вывод на экран, время на тест - 2
секунды.
Задача 1 «Самый высокий» (5 баллов)
На праздник был устроен конкурс. В конкурсе участвовало N человек.
Известен, рос каждого (A[I]).
Нужно узнать количество человек, которые равны самому высокому не
считая его самого.
Ограничение:
1<=N<=10000
1<=A<=10000
Входные данные:
N
A[1]
A[2]
...
A[N]
Выходные данные:
KOL - количество человек, которые
равны самому высокому не считая его
самого.
Пример ввода:
5
100
200
300
300
300
Пример вывода:
2
Задача 2 «Оценки» (5 баллов)
Гена получил за день 4 оценки. Вам дан список его оценок, а вам нужно
вывести самую маленькую оценку.
Входные данные:
A1
A2 - оценки Гены.
A3
A4
Выходные данные:
Min - самая маленькая из
оценок.
Пример ввода:
1
2
3
4
Пример вывода:
1
Задача 3 «Таблица» (15 баллов)
После проведения городской олимпиады в главный компьютер залез
злобный вирус и перепутал таблицу с результатами. Но к счастью
сохранились количество участников (N), места (A1i), баллы (A2i), фамилия
участника (A3i) и класс (A4i). Помогите заново рассортировать таблицу по
местам в порядке убывания. Если места равны, вывести в том порядке, в
котором они идут во вводе. Места не всегда соответствуют баллам.
Входные данные:
N
A11 A21 A31 A41
A12 A22 A32 A42
...
A1n A2n A3n A4n
Выходные данные:
B11 B21 B31 B41
B12 B22 B32 B42 – отсортированная
...
таблица.
B1n B2n B3n B4n
Пример ввода:
4
3 100 kyche 7
1 200 ksich 7
4 12 klim 9
2 122 min 11
Пример вывода:
1 200 ksich 7
2 122 min 11
3 100 kyche 7
4 12 klim 9
Задача 4 «Феремер» (15 баллов)
Поле фермера имеет вид прямоугольника. Заданы координаты четырех его
углов (в порядке обхода - x1 y1 x2 y2 x3 y3 x4 y4) и координаты фермера (xf
yf).
Нужно выяснить, стоит фермер в центре поля, или нет.
Входные данные:
x1 y1
x2 y2
x3 y3
x4 y4
xf yf
Выходные данные:
Yes/No (Yes в случае ответа
да, No - нет)
Пример ввода:
00
02
22
20
11
Пример вывода:
Yes
Задача 5 «Праздник» (30 баллов)
В
селе
"Старокалпакское"
живет
N
(1<=N<=100)
человек.
Каждый человек в селе имеет уникальный номер от 1 до N. Человек 1 решил
устроить праздник. В деревне живут добрые и дружные люди и поэтому,
если кого-то пригласили на праздник то он, в свою очередь, приглашает всех
кого он знает.
Вам задается число N и матрица знакомств.
Элемент a[i,j] = 1 если человек i знает человека j, а если a[i,j]=0, то человек
i не знает человека j.
Вывод должен содержать количество приглашенных и их номера в
порядке возрастания.
Входные данные:
N
a[1,1] a[1,2] ... a[1,n]
a[2,1] a[2,2] ... a[2,n]
...
a[n,1] a[n,2] ... a[n,n]
Выходные данные:
K
Nom[1] Nom[2] ... Nom[K]
Пример ввода:
3
101
010
001
Пример вывода:
2
13
Задача 6 «Game/Игра» (30 баллов)
Компания "BIZZARD" пишет игру под названием "ND - trap". Смысл игры
заключается в следующем:
1. Игра ведётся в p-мерном простанстве.
2. Игровое поле размером NxNxN... (p раз).
3. Ячейка поля размерами 1x1x1... (p раз).
4. Дана начальная позиция игрока (матрица A) и позиция игрока при
окончании игры (матрица B).
5. На поле K видов смертельных ловушек. Если сумма координат делится на
c[i], то в этой ячейке ловушка вида с[i] и в неё нельзя заходить.
6. За один ход можно попасть в смежную клетку.
Ограничения:
1<=N<=1000;
1<p<=15;
Ai, Bi, Ci - натуральные числа, не превосходящие N
0<=K<=10.
Входные данные:
NPK
A1 A2 … AN - начальная
позиция.
B1 B2 … BN - конечная
точка.
C1 C2 … CK - виды ловушек.
Выходные данные:
R - Минимальное число ходов,
за которое можно попасть из
начальной точки в конечную
Пример ввода:
230
111
222
Пример вывода:
3
Описания алгоритмов решения.
Описание алгоритма решения задачи «Груз».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Суммируем числа и выводим ответ.
Пример решения:
var
a:array [1..1000] of longint;
i,n,s:longint;
begin
read(n);
for i:=1 to n do read(a[i]);
for i:=1 to n do s:=s+a[i];
writeln(s);
end.
Описание алгоритма решения задачи «Грибники».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
1.Находим максимальный элемент.
2.Находим минимальный элемент.
3.Находим разницу между максимальным и минимальным.
4.Выводим разницу плюс один.
Пример решения:
var
a:array [1..1000] of longint;
n,i,p,p1,max,min:longint;
begin
read(n);
for i:=1 to n do read(a[i]);
max:=-maxlongint;
for i:=1 to n do
if a[i]>max then begin
max:=a[i];
p:=i;
end;
min:=maxlongint;
for i:=1 to n do
if a[i]<min then begin
min:=a[i];
p1:=i;
end;
writeln(p);
writeln((max-min)+1);
end.
Описание алгоритма решения задачи «Игра».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
1.Находим в строке(S) строку (S1).
2.Увеличиваем счетчик и помещаем в массив позицию начала найденного
слова.
3.Затираем в строке(S) позиции найденного слова (S1).
4.Повторяем это, пока не закончится слово(S).
Пример решения:
var
k:array [1..1000] of longint;
p,i,kol,pr:longint;
s,s1:string;
begin
readln(s);
readln(s1);
while pr<>1 do begin
p:=0;
p:=pos(s1,s);
if p=0 then break;
inc(kol);
k[kol]:=p;
for i:=1 to length(s1) do s[(p+i)-1]:='1';
end;
writeln(kol);
for i:=1 to kol do writeln(k[i]);
end.
Описание алгоритма решения задачи «Магазин».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
1.Находим середину(X Y) отрезка(x1_y1 x2_y2) по формуле X=(X1+X2)/2 Y=(Y1+Y
2.Перебираем все дома и находим и выводим номер расстояние, от которого до
середины отрезка минимально по формуле на Паскале: SQRT(SQR(XX[I]X)+SQR(YY[I]-Y))
Пример решения:
var
p,n,i,x1,y1,x2,y2,xx,yy:longint;
min,x,y:real;
begin
read(n);
read(x1,y1);
read(x2,y2);
x:=(x1+x2)/2;
y:=(y1+y2)/2;
min:=2323;
for i:=1 to n do begin
read(xx,yy);
if min>(sqrt(sqr(xx-x)+sqr(yy-y))) then begin
min:=sqrt(sqr(xx-x)+sqr(yy-y));
p:=i;
end;
end;
writeln(p);
end.
Описание алгоритма решения задачи «Индиана Джонс».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Пример решения:
type
ss=array [1..100,1..100] of char;
var
mn:set of char;
que:array [1..10000,1..3] of integer;
x1,y1,x2,y2,n,m,k,xx,yy,e,b,i,j,o,kol,x,y:longint;
s:string;
a:^ss;
l:array [1..255] of char;
f: char;
procedure pm(x,y,kol:longint);
begin
inc(e);
que[e,1]:=x;
que[e,2]:=y;
que[e,3]:=kol;
a^[x,y]:='#';
end;
procedure vz(var x,y,kol:longint);
begin
x:=que[b,1];
y:=que[b,2];
kol:=que[b,3];
inc(b);
end;
procedure gl;
type
kn= array [1..4,1..2] of integer;
const
st:kn=((0,1),(1,0),(-1,0),(0,-1));
begin
o:=0;
while o<4 do begin
inc(o);
xx:=x+st[o,1];
yy:=y+st[o,2];
if (xx>0)and(yy>0)and(xx<=n)and(yy<=m)and (a^[xx,yy]=l[1]) then
begin
pm(xx,yy,kol);
if (xx=x2)and(yy=y2) then begin
writeln('Yes ',kol);
halt;
end;
end;
end;
end;
begin
new(a);
read(x1,y1);
read(x2,y2);
read(n,m);
readln(k);
for i:=1 to k do begin
read(l[i]);
mn:=mn+[l[i]];
read(f);
end;
for i:=1 to n do begin
for j:=1 to m do begin
read(a^[i,j]);
if not(a^[i,j] in mn) then a^[i,j]:='#'
else a^[i,j]:=l[1];
end;
readln;
end;
b:=1;
e:=0;
kol:=0;
pm(x1,y1,kol);
while b<=e do begin
vz(x,y,kol);
inc(kol);
gl;
end;
writeln('No');
dispose(a);
end.
Описание алгоритма решения задачи «Числа».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Для решения необходимо использовать рекурентное соотношение:
num[0]:=1;
for j:=1 to n do
if c[j]<=m then
for i:=c[j] to m do
num[i]:=num[i]+num[i-c[j]];
Где с[i] - i-ое число из множества
m - количество чисел в данном множестве.
num[i] - количество способов, которым
можно получить число i из чисел данного множества.
Пример решения:
Var
n,i,j:longint;
m:longint;
c:array[0..501]of longint;
num:array[0..501]of longint;
Begin
read(n,m);
for i:=1 to n do read(c[i]);
num[0]:=1;
for j:=1 to n do
if c[j]<=m then
for i:=c[j] to m do
num[i]:=num[i]+num[i-c[j]];
writeln(num[m]);
End.
Описание алгоритма решения задачи «Самый высокій».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Пример решения:
var
a:array [1..10000] of longint;
n,i,max,k:longint;
begin
read(n);
for i:=1 to n do read(a[i]);
max:=-maxlongint;
for i:=1 to n do
if max<a[i] then max:=a[i];
for i:=1 to n do
if a[i]=max then inc(k);
writeln(k-1);
end.
Описание алгоритма решения задачи «Оценки».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Находим минимальное и выводим его.
Пример решения:
Var
a:array[1..4]of longint;
max,i:longint;
Begin
for i:=1 to 4 do readln(a[i]);
max:=a[1];
for i:=2 to 4 do
if a[i]>max then max:=a[i];
writeln(max);
End.
Описание алгоритма решения задачи «Таблица».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Сортируем массив по первой цифре-месту.
Пример решения:
var
s1:array [1..100] of string;
a:array [1..100] of longint;
ww,ss:string;
kk,i,n,j,s,k,k1:longint;
code:integer;
begin
readln(n);
for i:=1 to n do
begin
readln(s1[i]);
kk:=pos(' ',s1[i]);
ww:=copy(s1[i],1,kk-1);
val(ww,a[i],code);
end;
for j:=1 to n-1 do begin
s:=a[j];
k:=j;
ss:=s1[j];k1:=j;
for i:=j+1 to n do
if a[i]<s then begin s:=a[i];
a[k]:=a[j];
a[j]:=s;
s1[k1]:=s1[j];
s1[j]:=ss;
end;
for i:=1 to n do
writeln(s1[i]);
end.
k:=i;ss:=s1[i];k1:=i; end;
Описание алгоритма решения задачи «Фермер».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
1.Находим середину(X Y) отрезка(x1_y1 x3_y3) по формуле X=(X1+X3)/2
Y=(Y1+Y3)/2
2.Проверяем стоит или нет фермер в точке (X Y).
Пример решения:
var
x,y:array[1..100]of longint;
i,xf,yf:longint;
begin
for i:=1 to 4 do read(x[i],y[i]);
read(xf,yf);
if (xf=(x[1]+x[3]) div 2)and(yf=(y[1]+y[3])div 2)
then writeln('Да')
else writeln('Нет');
end.
Описание алгоритма решения задачи «Праздник».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Данная задача решается поиском в ширину.
Люди в селе это вершины графа, а знакомства это дуги между ними.
Требуется найти все достижимые вершины из 1. Поиск лучше всего
организовывать поиск очередью.
Пример решения:
Var
s:string;
qe,qb,i,j,n,m,k,kl:longint;
a:Array[1..100,1..100]of byte;
color,que:array[1..100]of byte;
Begin
readln(n);
for i:=1 to n do
for j:=1 to n do read(a[i,j]);
qe:=1; qb:=1; kl:=1;
color[1]:=1; que[1]:=1;
repeat
for i:=1 to n do
if (a[que[qb],i]=1)and(color[i]=0) then begin
inc(qe);
que[qe]:=i;
color[i]:=1;
inc(kl);
end;
inc(qb);
until qb>qe;
writeln(kl);
for i:=1 to n do
if color[i]=1 then write(i,' ');
End.
Описание алгоритма решения задачи «Игра».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Данная задача решается Градиентным спуском.
В начале алгоритма мы в начальной точке.
Смотрим куда можно пойти что-бы приблтзится к конечной точке как
можно ближе, и проверяем что-бы там не было ловушки. Алгоритм
заканчивает работу, когда дойдет до конечной точки.
Пример решения:
{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}
Var
step,n,m,k,i,j,sum:Longint;
kol,nap,kor,min,sr:Longint;
a,b,c:Array[1..1000]Of Longint;
Error,ok:Boolean;
Function Rast(ch:char):longint;
Begin
If ch='-' Then Begin
sr:=0;
For j:=1 To m Do
If i=j
Then sr:=sr+ABS((a[j]-1)-b[j])
else sr:=sr+ABS(a[j]-b[j]);
rast:=sr
End
Else Begin
sr:=0;
For j:=1 To m Do
If i=j Then sr:=sr+ABS((a[j]+1)-b[j])
else sr:=sr+ABS(a[j]-b[j]);
rast:=sr
End;
End;
Begin
Read(n,m,k);
For i:=1 To m Do Read(a[i]);
For i:=1 To m Do Read(b[i]);
For i:=1 To k Do Read(c[i]);
Error:=False;
While Not error Do Begin
inc(step);
Min:=MaxLongint;
For i:=1 To m Do Begin
sum:=0;
ok:=true;
For j:=1 To m Do sum:=sum+a[j];
Dec(sum);
For j:=1 To k Do
If sum mod c[j]=0 Then ok:=False;
If (ok)and(rast('-')<min)and(a[i]-1>0) Then Begin
min:=rast('-');
nap:=i;
kor:=-1;
End;
Inc(sum);
Inc(sum);
ok:=true;
For j:=1 To k Do
If sum mod c[j]=0 Then ok:=False;
If (ok)and(rast('+')<min)and(a[i]+1<=n) Then Begin
min:=rast('+');
nap:=i;
kor:=1;
End;
End;
kol:=0;
a[nap]:=a[nap]+kor;
For i:=1 To m Do
If a[i]=b[i] Then Inc(kol);
If kol=m Then break;
End;
WriteLn(step);
End.
Гомельская областная олимпиада школьников по информатике.
11 января 2003г. 5-8 класс.
Задачи командного тура для младших.
Задача 1 “Магазин”
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
В магазин поступило N (1<=N<=100) бутылок кефира. В каждой Ai (
0<=A1<=20000) литров кефира.
Сколько литров кефира привезли в магазин?
Входные данные:
N
A1
A2
…
Выходные данные:
K – количество кефира, привезенное в магазин.
An
Пример ввода:
4
1
2
5
5
Пример вывода:
13
Задача 2 “Дом”
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
В одном городе есть дом. Он состоит из N этажей на каждом этаже M
квартир, а в каждой квартире проживает A[I,J] человек. Мэр этого города
решил расселить жильцов так, чтобы суммарное количество человек на этаже
было не больше чем на более высоких этажах. Помогите мэру.
На входе все числа натуральные, не превосходящие 100.
Входные данные:
NM
A11 A12 … A1m
A21 A22 … A2m – количество
…
жителей
An1 An2 … Anm в квартирах
Выходные данные:
B11 B12 … B1m
B21 B22 … B2m – количество жителей
…
в квартирах после
Bn1 Bn2 … Bnm расселения.
Пример
ввода:
3
4 5 6
6 5 3
2 1 6
Пример вывода:
6 6 5
5 4 3
3 2 1
Задача 3 “Вертолёты”
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
На посадочную площадку должны сесть N вертолетов. Заданы координаты
центра и радиус посадочной площадки, количество вертолетов и координаты
их посадки.
Сколько вертолетов село на посадочную площадку или ее границу?
Ограничения:
1<=N<=100
1<=Ai, Bi<=1000
Формат ввода:
X Y R – координаты центра и радиус площадки.
N – количество вертолетов.
A1 B1
A2 B2 – координаты вертолетов.
…
AN BN
Пример ввода:
0 0 10
2
5 5
10 103
Формат вывода:
K – количество приземлившихся на площадку
вертолетов.
Пример вывода:
1
Задача 4 “Место встречи”
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
Мальчик и девочка хотят встретится. Мальчик живет в городе C, а девочка
в городе V.
Каждый город имеет свои координаты. Вам нужно найти номер города
где суммарное расстояние от него и до городов V и C будет минимально.
Если таких городов несколько то вывести их номера в порядке возрастания.
Всего городов N. Города V и С тоже могут быть в ответе.
Формат ввода:
N V C – целые, не превосходящие 100.
X1 Y1
X2 Y2
…
Xn Yn
Формат вывода:
Num1 Num2 … Numn – номера городов в порядке возрастания
Пример ввода:
4
0
2
1
3
1 2
0
2
1
3
Пример вывода:
123
Задача 5 “Цепочка”
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
Дана цепочка больших английских символов. Символы разделяются
знаком "-". Вывести процентное содержание каждого символа в цепочке в
порядке встречаемости в строке, т.е. символ который впервые встретился
позже чем другой символ будет стоять после него.
Формат ввода:
S – цепочка символов.
Формат вывода:
Процентное содержание для каждого символа.
Пример ввода:
A-B-C
Пример вывода:
A=33%
B=33%
C=33%
Задача 6 “Двоечник”
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
Вася плохо учится. Учительница задала ему на дом написать предложение
и сказала, если там будут ошибки, то она поставит ему 1. Вася не хочет
получать 1. И он попросил Вас исправить его предложение.
Вам дано предложение Васи (длина не более 255 символов).
Все слова в предложении разделены пробелами.
Вы должны заменить все предлоги "по" на предлоги "на".
Все предложения состоят только из маленьких русских букв и точки.
Формат ввода:
S - исходное предложение.
Формат вывода:
R – исправленное предложение.
Пример ввода:
по поле растут ромашки
Пример вывода:
на поле растут ромашки
Задача 7 “Игра”
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
Есть игра под названием "qgame". Поле это лабиринт с N комнатами и M
дорогами между ними.
Каждая i-ая дорога позволяет пройти из A[i] в B[i]. В каждой i-ой комнате i
монстров. Каждая i-ая дорога содержит R[i] монстров. В комнате 1 вход, а в
комнате N (1<=n<=100) выход. Требуется определить последовательность
комнат, по которой нужно пройти что-бы пройти в n-ую и встретить
наименьшее число монстров.
Формат ввода:
N
M
A1 B1 R1
A2 B2 R2
…
Am Bm Rm
Формат вывода:
K – минимальное количество
монстров, встреченное по пути.
V1 V2 … Vn –
последовательность вершин
этого пути.
Пример ввода:
4
4
121
131
241
342
Пример вывода:
9
124
Задача 8 “Chess” (30 баллов)
Ввод с клавиатуры.
Вывод на экран.
Время на тест - 2 секунды.
Есть игра под названием "CHESS COOL GAME".
Правила в ней такие:
1. Игра ведется на поле NxM.
2. В начале игрок выбирает себе фигуру (это любая шахматная фигура
кроме пешки) и ставит его в точку (X;Y).
3. В игре есть стены (их K штук) и на них нельзя ступать.
4. Фигурки ходят точно также как и шахматные.
По ней проводится чемпионат, выиграет тот, кто выберет правильную
фигуру, т.е. фигуру, которая сможет дойти до клетки (x1;y1) из клетки (x;y).
Естественно участники не знают каким будет поле.
Вам дается поле и точки (x;y) и (x1;y1).
Вам необходимо вывести все фигуры, которые смогут дойти до точки
(x1,y1) в любом порядке.
Если их нет вывести "NO".
Примечания:
Фигуры следует выводить через пробел.
Используемые фигуры: Конь Слон Ладья Ферзь Король.
Фигуры не могут ходить на стены, но Конь может перелетать их. (т.е. если
на пути встретилась стена и мы там не становимся, то игнорируем ее).
Слон ходит только по диагонали,
Ладья ходит по горизонтали и вертикали,
Ферзь может ходить как слон и ладья,
Король ходит в любую соседнюю клетку (т. е. клетку имеющую хотя бы
одну смежную точку стой в которой он стоит)
Конь ходит вначале на две клетки в одну сторону, а затем на одну клетку в
другую.
Формат ввода:
N M K - 1<=N, M, K<=100
xy
x1 y1
xx[1] yy[1]
xx[2] yy[2] – места расположения стен.
...
xx[k] yy[k]
Формат вывода:
Названия фигур по одной через пробел или "NO"
Выводить фигуры в следующем порядке:
Ладья Слон Конь Ферзь Король
Пример ввода:
443
11
44
23
32
33
Пример вывода:
Ладья Ферзь Король
Описания алгоритмов решения
Описание алгоритма решения задачи «Магазин».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Суммируем числа и выводим ответ.
Пример решения:
Var
x,sum,i,n:longint;
Begin
readln(n);
for i:=1 to n do begin
readln(x);
sum:=sum+x;
end;
writeln(sum);
End.
Описание алгоритма решения задачи «Дом».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
1. Сортируем двумерный массив в порядке убывания.
2. Выводим рассортированный массив.
Пример решения:
var
a:array [1..2500] of longint;
n1,n,i,s,j,k,m,kol:longint;
begin
read(n,m);
for i:=1 to n*m do read(a[i]);
n1:=n*m;
for j:=1 to n1-1 do
begin
s:=a[j];
k:=j;
for i:=j+1 to n1 do
if a[i]>s then begin
s:=a[i]; k:=i
end;
a[k]:=a[j];
a[j]:=s;
end;
for i:=1 to n do begin
for j:=1 to m do begin
inc(kol);
write(a[kol],' ');
end;
writeln;
end;
end.
Описание алгоритма решения задачи «Вертолёты».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Смотрим расстояния от центра посадки до вертолетов.
Если оно меньше или равно радиусу посадки то вертолет призимлился на
площадку иначе нет. И потом просто нужно посчитать сколько вертолетов
село на площадку.
Пример решения:
Var
r,x,y,i,k,n,x1,y1:longint;
Begin
read(x,y,r);
read(n);
for i:=1 to n do begin
read(x1,y1);
if sqrt(sqr(x-x1)+sqr(y-y1))<=r then inc(k);
end;
writeln(k);
End.
Описание алгоритма решения задачи «Место встречи».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Для каждого города находим суммарное расстояние. Затем находим
наилучшие города и выводим их (если искать ответы с 1 города тогда
сортировать города не нужно).
Пример решения:
{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}
Var
ns:array[1..100]of longint;
x,y:array[1..100]of real;
kl,i,j,n,m,k:longint;
s:string;
min,tik:double;
Begin
read(n,m,k);
for i:=1 to n do read(x[i],y[i]);
min:=maxlongint;
for i:=1 to n do
begin
tik:=sqrt(sqr(x[i]-x[m])+sqr(y[i]-y[m]))+sqrt(sqr(x[i]x[k])+sqr(y[i]-y[k]));
if (tik-min<0.00000001) then begin
inc(kl);
ns[kl]:=i;
end;
if (tik<min) then begin
kl:=1;
ns[1]:=i;
min:=tik;
end;
end;
for i:=1 to kl do write(ns[i],' ');
End.
Описание алгоритма решения задачи «Цепочка».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Находим сколько каждого символа в цепочке и общее количество
символов.
Далее просто считаем процентное содержание каждого символа:
kol[i]/okol*100
где:
kol[i] - количество i-ых символов.
okol - общее количество символов в цепочке.
Пример решения:
Type
e=record c:string[1];k:longint;end;
Var
s:string;
s1:string[1];
i,j,n,kol,kl,l:longint;
a:Array[1..200]of e;
Begin
readln(s);
while length(s)>0 do begin
s1:=copy(s,1,1);
delete(s,1,2);
inc(kl);
l:=0;
for i:=1 to kol do
if s1=a[i].c then begin
inc(a[i].k);
l:=1;
end;
if l=0 then begin
inc(kol);
a[kol].k:=1;
a[kol].c:=s1;
end;
end;
for i:=1 to kol do
writeln(a[i].c,'=',a[i].k/kl*100:0:0,'%');
End.
Описание алгоритма решения задачи «Двоечник».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Разбиваем исходное предложение на слова и если среди этих слов есть
слово "по" то заменяем его на слово "на".
Пример решения:
Var
s,s1,out:String;
i,j,n:LongInt;
Begin
ReadLn(s);
s:=s+' ';
While LengTh(s)>0 Do Begin
s1 := Copy (s,1,pos (' ',s) - 1);
If s1='по' Then out:=out+'на'
Else out:=out+s1;
Delete (s,1,pos (' ',s) - 1);
While (s[1]=' ')And(LengTh(s)>0) Do Begin
out:=out+' ';
delete(s,1,1);
End;
End;
WriteLn(out);
End.
Описание алгоритма решения задачи «Игра».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Данная задача на метод "Дейкстра" (но можно писать очередь). Запускаем
"Дейкстру" (очередь) из начальной точки в конечную и попутно храним
предков (клетку из которой мы пришли в исходную), а когда алгоритм
закончил работать то востанавливаем путь по предкам.
Пример решения:
Const
Done=2;
Free=1;
Var
Gr:Array[1..100,1..100]Of Integer;
Put,Pred,Metka,Best:Array[1..100]Of Longint;
error,xod:Boolean;
kol,a,b,min,nom,n,i,j,k,x,y,z:Longint;
Begin
Readln(n);
For i:=1 To n Do
For j:=1 To n Do Gr[i,j]:=MaxInt;
Readln(k);
xod:=true;
For i:=1 To k Do Begin
Read(x);
Read(y);
Read(z);
Gr[x,y]:=z;
End;
a:=1; b:=n;
For i:=1 To n Do Begin best[i]:=MaxLongint;Metka[i]:=Free;End;
Min:=MaxLongint;
Nom:=a;
Metka[a]:=done;
Best[a]:=1;
Kol:=0;
Pred[a]:=0;
Error:=False;
While Not error Do
Begin
Metka[nom]:=done;
If nom=b
Then Begin
i:=nom;
While Pred[i]<>0 Do Begin
inc(kol);
Put[kol]:=i;
i:=Pred[i];
End;
inc(kol);
put[kol]:=a;
Break;
End;
For i:=1 To n Do
If (Gr[nom,i]<>MaxInt)and(Gr[nom,i]+Best[nom]+i<Best[i])
Then Begin Best[i]:=Gr[nom,i]+Best[nom]+i;Pred[i]:=nom;End;
min:=MaxLongint;
For i:=1 To n Do Begin
If (Metka[i]=free)and(Best[i]<min) Then Begin
Min:=Best[i];
Nom:=i;
End;
End;
End;
Write('monstrs = ');Writeln(Best[b]);
Write('path = ');
For i:=kol DownTo 1 Do Write(Put[i],' ');
Readln;
End.
Описание алгоритма решения задачи «Chess».
Автор задачи: Миняйлов Владимир и Вераксич Сергей, СШ 27, 7 класс.
Данную задачу лучше всего решать рекурсией (но можно и очередью).
Запускаем рекурсию (очередь) из начальной клетки в кнечную и проверяем
есть ли путь до конечной клетки. Для каждой фигуры алгоритм запускаем
отдельно.
Пример решения:
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+}
{$M 16384,0,655360}
Const
names:Array[1..5]of string=
('Ладья','Слон','Конь','Ферзь','Король');
Var
a,a1:array[-1..102,-1..102]of byte;
ok:array[1..5]of boolean;
ii,jj,u,i,j,kol,xx,yy,n,m,k,x,y,x1,y1:longint;
Procedure RecRook(xx,yy:byte);
begin
for i:=1 to n do
for j:=1 to m do
if (a1[i,j]=0)and(xx=i) or (a1[i,j]=0)and(yy=j) then begin
a1[i,j]:=2;
if (i=x1)and(j=y1) then ok[1]:=true;
RecRook(i,j);
end;
end;
Procedure RecBishop(xx,yy:byte);
begin
for i:=1 to n do
for j:=1 to m do
if (a1[i,j]=0)and(abs(xx-i)=abs(yy-j)) then begin
a1[i,j]:=2;
if (i=x1)and(j=y1) then ok[2]:=true;
RecBishop(i,j);
end;
end;
Procedure RecNeight(xx,yy:byte);
Const
st:array[1..8,1..2]of shortint=
((1,2),(2,1),(-1,-2),(-2,-1),(-1,2),(-2,1),(1,-2),(2,-1));
begin
for i:=1 to n do
for j:=1 to m do
for u:=1 to 8 do
if (a1[i,j]=0)and(xx-i=st[u,1])and(yy-j=st[u,2]) then begin
a1[i,j]:=2;
if (i=x1)and(j=y1) then ok[3]:=true;
RecNeight(i,j);
end;
end;
Procedure RecQuein(xx,yy:byte);
begin
for i:=1 to n do
for j:=1 to m do
if (a1[i,j]=0)and(xx=i)or
(a1[i,j]=0)and(yy=j)or
(a1[i,j]=0)and(abs(xx-i)=abs(yy-j))
then
begin
a1[i,j]:=2;
if (i=x1)and(j=y1)
then ok[4]:=true;
RecQuein(i,j);
end;
end;
Begin
read(n,m,k);
read(x,y);
read(x1,y1);
for i:=1 to k do begin
read(xx,yy);
a[xx,yy]:=1;
end;
a1:=a;
RecRook(x,y);
RecRook(x,y);
RecRook(x,y);
RecRook(x,y);
RecRook(x,y);
a1:=a;
RecBishop(x,y);
RecBishop(x,y);
RecBishop(x,y);
RecBishop(x,y);
RecBishop(x,y);
RecBishop(x,y);
a1:=a;
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
RecNeight(x,y);
ii:=x; jj:=y;
for i:=1 to n do
for j:=1 to m do
if a1[i,j]=2 then begin ii:=i; jj:=j;a1[i,j]:=1;end;
RecNeight(ii,jj);
ii:=x; jj:=y;
for i:=1 to n do
for j:=1 to m do
if a1[i,j]=2 then begin ii:=i; jj:=j;end;
RecNeight(ii,jj);
ii:=x; jj:=y;
for i:=1 to n do
for j:=1 to m do
if a1[i,j]=2 then begin ii:=i; jj:=j;end;
a1[ii,jj]:=1;
RecNeight(ii,jj);
ii:=x; jj:=y;
for i:=1 to n do
for j:=1 to m do
if a1[i,j]=2 then begin ii:=i; jj:=j;end;
a1[ii,jj]:=1;
RecNeight(ii,jj);
ii:=x; jj:=y;
for i:=1 to n do
for j:=1 to m do
if a1[i,j]=2 then begin ii:=i; jj:=j;end;
a1[ii,jj]:=1;
RecNeight(ii,jj);
a1:=a;
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
RecQuein(x,y);
if ok[4] then ok[5]:=true;
for i:=1 to 5 do
if ok[i] then begin write(names[i],' ');inc(kol);end;
if kol=0 then writeln('NO');
End.
Гомельская городская олимпиада по информатике (1 декабря 2002 г.)
Задачи младшей группы (1-8 классы)
Во всех задачах ввод производится с клавиатуры, вывод – на экран.
Задача «Лимоны» (5 баллов)
В магазин завезли N лимонов. Из каждого выдавили Ai г. лимонного сока,
а нужно получить всего K г. Можно ли получить K или более г. лимонного
сока?
На входе все числа натуральные, не превосходящие 20000.
Входные данные:
N K A1 A2 ... An
Выходные данные:
Yes/No(Yes в случае ответа 'ДА',No
в противном случае.)
Пример ввода:
4 60
10 2 3 10
Пример вывода:
No
Задача «Марс» (5 баллов)
Дети марсиан писали диктант. Каждый получил оценку Ai. На марсе
хорошая оценка строго больше X и строго меньше Y. Сколько детей
получило хорошие оценки, если их было N человек?
На входе все числа натуральные, не превосходящие 1000
Входные данные:
NXY
A1
A2 - оценки детей марсиан.
...
An
Выходные данные:
K - количество детей, которые
получили хорошие оценки
Пример ввода:
5 5 10
56789
Пример вывода:
4
Задача «Programming» (15 баллов)
На планете Х есть язык программирования под названием "P--". У него
есть две версии "согласный" и "гласный". Например, команда "End" на
"согласном" языке может выглядеть как "nd" или "dn", а на "гласном" языке
она выглядит как "e", то есть в "согласной" версии содержатся все согласные
буквы команды в произвольном порядке, а в "гласной" версии содержатся все
гласные буквы команды в произвольном порядке.
Вам дана программа на исходном языке и программы на "гласном" и
"согласном" языках.
Вы должны узнать являются ли записи на "согласном" и "гласном" языках
записью исходной программы.
Гласные буквы на планете Х:
aeijouq
все остальные символы - согласные буквы.
Примечание:
Каждая команда содержится в отдельной строке, и программы состоят из
маленьких английских букв
Входные данные:
N - число команд в программе на
каждом языке.
Далее идут 3 программы,
сначала на исходном языке,
Выходные данные:
Yes/No - для согласного языка.
Yes/No - для гласного языка.
(Yes в случае правильного
ответа)
Пример ввода:
2
begin
end
ngb
Пример вывода:
Yes
No
затем на согласном и,
наконец, на гласном.
dn
ei
i
Задача «Города» (15 баллов)
Есть N городов. У каждого города есть координаты (Xi, Yi). 1-ый город
заражён вирусом под названием "язвенный суслик". Если расстояние от 1 до
какого-то другого города меньше или равно K то он заражается.
Выведите номера 2-х городов (один зараженный, а другой не зараженный)
расстояние между которыми минимально.
Вирус передается только из первого города.
С целью спасения нации всегда найдется хотя бы один не зараженный
город.
Примечание:
На вводе только целые числа.
Ограничения:
2<=N<=100
-1000<=Xi, Yi<=1000
Входные данные:
N K - Количество городов и
радиус заражения.
X1 Y1
X2 Y2 - Координаты городов
…
Xn Yn
Выходные данные:
N1 N2 - номера заражённого и
незаражённого
города,расстояние между
которыми минимально
Пример ввода:
31
11
12
22
Пример вывода:
23
Задача «Лабиринт» (30 баллов)
Есть лабиринт.
Он представляет собой прямоугольник N (строк) на M (столбцов).
Мальчик находится в клетке с координатами (X; Y) (X - столбец, Y - строка).
Сможет ли он пробраться в клетку (X1; Y1) (X1 - столбец, Y1 - строка),
если мальчик может двигаться по горизонтали или по вертикали.
Начало координат, клетка (1; 1), находится в первой строке и в первом
столбце.
Ограничения
1<= N, M <= 100
1<= X, X1 <= M
1<= Y, Y1 <= N
Примечание:
Мальчик всегда появляется на свободной клетке.
В лабиринте: 1- стена.0- проход.
Входные данные:
N M - размер лабиринта.
X Y - координаты начального
положения мальчика.
X1 Y1 - координаты клетки в
которую мальчику необходимо
попасть.
Далее следует N строк описание лабиринта
Выходные данные:
Yes/No - 'Yes' в случае когда
мальчик сможет добратьсядо
нужной клетки и 'No' в
противном случае.
Пример ввода:
33
11
33
000
010
110
Пример вывода:
Yes
Задача «Уравнение» (30 баллов)
Вам задано уравнение A1*X1+A2*X2+..+An*Xn=M, где n - это количество
чисел, Xi - i-я переменная, Ai - коэффициент перед i-ой переменной.
Вам необходимо найти некоторое решение (их много), в котором
минимальное из значений Xi будет как можно больше.
Все числа положительные.
Например, в уравнении 2*x1+2*x2=10 есть следующие решения:
2*3+2*2=10 (здесь минимальное 2)
2*4+2*2=10 (здесь минимальное 2)
2*2.5+2*2.5=10 (минимальное 2.5)
Наилучший вариант:
2*2.5+2*2.5=10.
Входные данные:
NM
A1
A2
…
An - коэффициенты
Выходные данные:
X - минимальный из корней в
решении.
Ответ выводить с точностью 6
знаков после запятой.
Пример ввода:
3 30
10
10
10
Пример вывода:
1.000000
Download