- •Оценка эффективности алгоритмов
- •Целочисленная арифметика
- •Дано натуральное число. Выяснить является ли оно палиндромом, то есть читается справа налево и слева направо одинаково
- •Дано натуральное число. Выяснить соотношение между количествами двоек и пятерок в этом числе
- •Найти самую большую и самую маленькую цифры данного натурального числа
- •Выяснить образуют ли цифры натурального числа возрастающую последовательность
- •Формат выходного файла
- •Формат входного файла
- •Формат выходного файла
- •Формат входного файла
- •Формат входного файла
- •Формат выходного файла
- •Длинная арифметика
- •Выходные данные
- •Задачи Задача 52 Иностранные земли
- •Входные данные.
- •Выходные данные.
- •Формат входного файла
- •Формат выходного файла
- •Задачи Задача 56 Уравнение
- •Решение
- •Одномерные массивы
- •Базовые задачи на массивы
- •Задача 15 Сокращение одночленов
- •Входные данные:
- •Задача 16 Школьный субботник
- •Входные данные:
- •Входные данные:
- •Выходные данные:
- •Примеры
- •Задача 27 Решение систем линейных уравнений на Pascal
- •Двумерные массивы
- •Описание массива
- •Способы создания массива
- •Задачи:
- •Задача 5 Малыш играет в "Морской бой 2" Малыш играет в "Морской бой". Поле для игры представляет собой квадрат
- •Входные данные
- •Выходные данные
- •Задача 26 Шарик в лабиринте
- •Примечание
- •Задача 27 Блохи
- •В первой строке входного файла Input.Txt находится 5 чисел, разделенных пробелом: n, m, s, t, q.
- •Входные данные
- •Выходные данные
- •Примеры
- •Задача 34 Магический квадрат
- •Формат входного файла
- •Формат выходного файла
- •Входные данные
- •Выходные данные
- •Входные данные
- •Выходные данные
- •Рекурсия
- •Комбинаторика
- •2.5. Генерация комбинаторных объектов
- •Множество всех подмножеств
- •Перестановки
- •Размещения
- •Перестановки с повторениями
- •Сочетания с повторениями
- •Перебор
- •Символ o()
- •Отсечение по времени
- •Рассмотрим несколько олимпиадных задач.
- •Шарик в лабиринте
- •Задача 1. Шарик в лабиринте
- •Задача 3 Цепочка слов
- •Входные данные
- •Выходные данные
- •Примеры
- •Формат входного файла
- •Формат выходного файла
- •Примеры
- •Динамическое программирование
- •Задача 8 Гвоздики
- •Задача 13 Лесенки
- •Задача 18 Свинья-копилка
- •Входные данные
- •Выходные данные
- •Задача 13 Лесенки Лесенкой называется набор кубиков, в котором каждый более верхний слой содержит кубиков меньше, чем предыдущий.
- •Задача 18 Свинья-копилка
- •Формат входного файла:
- •Формат выходного файла:
- •Примеры
- •Решение
- •Входные данные:
- •Выходные данные:
- •Формат входа
- •Формат выхода
- •Задача 39 Лесенка-2
- •Входные данные
- •Выходные данные
- •Примеры
- •Системы счисления
- •Задача 11 Троичная сбалансированная система счисления
- •Алгоритм перевода
- •Процедуры и функции для работы с символами и строками
- •Определить количество слов в строке
- •Получите строковой массив из всех слов данной строки
- •Получите строковой массив из всех слов данной строки и
- •Получите строковой массив из всех слов данной строки и
- •Составьте программу, определяющую, является ли введенное слово изображением числа
- •Введите 2 целых числа. Преобразуйте числа в две строки, объедините их в одну строку и выведите результат на экран.
- •Вычислите длину самого короткого и самого длинного слов в строке
- •Подсчитайте количество букв в каждом слове данной строки
- •Дана строка. Определить количество слов этой строки, в которых есть ровно две буквы «е»
- •Составьте программу, удаляющую все лишние пробелы из введенной строки
- •Напишите программу, сортирующую символы введенной с клавиатуры строки в порядке возрастания их номеров в ascii-таблице. Например, если введено: 'cba', в результате надо получить ‘abc’.
- •В тексте, состоящем из маленьких латинских букв , подсчитайте количество гласных букв
- •Заданы фамилия, имя и отчество учащегося, разделенные пробелом. Напечатайте его фамилию и инициалы.
- •Сложное слово состоит из двух частей одинаковой длины и соединительной гласной. Найдите обе части этого слова.
- •Вычеркните из слова х те буквы, которые встречаются в слове z
- •Подсчитайте число различных букв в слове
- •Даны два слова. Составьте программу, определяющую можно или нет из букв слова а составить слово в.
- •Даны два слова. Являются ли они анаграммами
- •Является ли данная строка палиндромом?
- •Задача 4. Сокращение одночленов
- •Входные и выходные данные
- •Это чисто техническая задача на аккуратное программирование.
- •Задача 6 Текст
- •Входной файл Input.Txt в первой строке входного файла находится 5 чисел,разделенных пробелом: n, m, s, t, q.
- •Бинарные деревья. Алгоритм HeapSort
- •Поиск в глубину в графе
- •Алгоритм Флойда поиска кратчайших расстояний и кратчайших путей
- •Бинарные деревья. Алгоритм HeapSort
- •Графызадачи Двоичная куча
- •Примеры задач, которые решаются с помощью двоичной кучи
- •Поиск максимального потока методом Форда-Фалкерсона на Pascal
- •Графызадачи Поиск сильно связанных компонент на Pascal
- •Поиск точек раздела, мостов и двусвязных компонент
- •Идеи алгоритмов
- •Точки раздела
- •Двусвязные компоненты
- •Задача 21 Моя Столица
- •Вычислительная геометрия
- •3. Уравнение прямой 2
- •4. Уравнение прямой проходящей через точку м(х0у0)
- •Формат входного файла
Задачи:
Хождение за золотом – 1
Хождение за золотом – 2
Хождение за золотом – 3
Малыш играет в морской бой 1
Малыш играет в морской бой 2
Площадь острова 1
Площадь острова 2
Площади островов 1
Площади островов 2
Прямоугольник или квадрат
Телефонный конь 1
Телефонный конь 2
Телефонный конь 3
Одинокий конь
Два коня
Ферзь и пешка
Голодный конь
Ферзь и конь
Два разноцветных коня
Шахматы
Вырежем шахматную доску
Сапер 1
Робот К-79
Спираль
Прямоугольники
Шарик в лабиринте
Блохи
Гиперканалы
Поиск выхода из лабиринта
Лабиринт
Потоп
Прыжки по матрице
Черные и белые клетки
Магический квадрат
Построение магических квадратов нечетного порядка
Вирусы
Сапер 2
Желанный спайс
Сокровище в лабиринте
Суперквадрат
Матрица
Прорыв через лабиринт
Игра с фишками
Симпатичные таблицы
Магия Копперфильда
Черно-белая графика
Лебеди
Задача 1 Хождение за золотом – 1
Однажды царь решил вознаградить одного из своих мудрецов за хорошую работу. Он привел его в прямоугольную комнату размером NxM, в каждой клетке которой лежало несколько килограммов золота. Царь разрешил мудрецу сделать обойти несколько клеток (переходя с клетки, где сейчас
находится мудрец, в одну из четырех с ней соседних), и собрать все золото, которое попадется на его пути.
Вам дан маршрут мудреца. Требуется определить, сколько килограммов золота он собрал.
Входные данные:
Во входном файле записано план комнаты. Сначала записано количество строк N, затем - количество столбцов M (1≤N≤20,1≤M≤20). Затем записано N строк по M чисел в каждой - количество килограммов золота, которое лежит в данной клетке (число от 0 до 50). Далее записано число X - сколько клеток обошел мудрец. Далее записаны координаты этих клеток (координаты клетки - это два числа: первое определяет номер строки, второе - номер столбца, верхняя левая клетка на плане имеет координаты (1,1), правая нижняя - (N,M)). Гарантируется, что мудрец не проходил по одной и той же клетке дважды.
Выходные данные:
В выходной файл выведите количество килограммов золота, которое собрал мудрец.
Пример входного и выходного файла:
Input.txt |
Output.txt |
3 4 1 2 3 4 5 6 7 8 9 10 11 12 5 1 1 2 1 2 2 2 3 1 3
|
22 |
Program zol1;
const nmax=100;
mmax=100;
var a:array[1..nmax,1..mmax] of integer;
i,n,m,j,t,k,res:integer;
Begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
read(n,m);
for i:=1 to n do считываем лабиринт
for j:=1 to m do
read(a[i,j]);
read(t); считываем количество передвижений
res:=0;
for k:=1 to t do
begin
read(i,j); считываем координаты клетки, в которую шагаем
inc(res,a[i,j]); берем из клетки золото
end;
close(input);
write(res); выводим результат
close(output);
end.
задачина2массивы
Задача 2 Хождение за золотом - 2
Задача такая же, как и предыдущая, только мудрец мог более одного раза проходить по одной и той же клетке. Золото с нее он брал при этом только один раз - когда проходил по клетке в первый раз.
Входные и выходные данные такие же, как в предыдущей задаче. Дополнительное ограничение: число пройденных мудрецом клеток не превышает 10000.
Пример:
Input.txt |
Output.txt |
3 4 1 2 3 4 5 6 7 8 9 10 11 12 9 1 1 2 1 2 2 2 3 1 3 1 2 1 1 1 2 2 2 |
30 |
В отличии от первой задачи, в которой мы не изменяли данную матрицу, в этой задаче надо обнулять содержимое клеток, которые мы посещаем.
Program zol2;
const nmax=100;
mmax=100;
var a:array[1..nmax,1..mmax] of integer;
i,n,m,j,t,k,res:integer;
Begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
read(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
read(t);
res:=0;
for k:=1 to t do
begin
read(i,j);
inc(res,a[i,j]);
a[i,j]:=0; очищаем клетку
end;
close(input);
write(res);
close(output);
end.
задачина2массивы
Задача 3 Хождение за золотом - 3
Задача такая же, как и предыдущая, только передвижения мудреца задаются другим способом:
Входные данные
Во входном файле записано план комнаты. Сначала записано количество строк N, затем - количество столбцов M (1≤N≤20,1≤M≤20). Затем записано N строк по M чисел в каждой - количество килограммов
золота, которое лежит в данной клетке (число от 0 до 50). Далее записано число X - сколько клеток обошел мудрец. 1≤X≤10000.
Известно, что мудрец начал с клетки с координатами (1,1).
Далее записано X-1 число: куда перемещался мудрец:
число 1 обозначает, что мудрец делал шаг вправо,
число 2 обозначает, что мудрец делал шаг вверх,
число 3 обозначает, что мудрец делал шаг влево,
число 4 обозначает, что мудрец делал шаг вниз.
Известно, что мудрец не выходил из лабиринта, при этом он мог через одну и ту же клетку пройти несколько раз.
Выходные данные
В выходной файл выведите количество килограммов золота, которое собрал мудрец.
Пример:
Input.txt |
Output.txt |
3 4 1 2 3 4 5 6 7 8 9 10 11 12 9 4 1 1 2 3 3 1 4
|
24 |
В решении этой задачи проще всего использовать оператор case.
Program zol3;
const nmax=100;
mmax=100;
var a:array[1..nmax,1..mmax] of integer;
nap,i,n,m,j,t,k,res:integer;
Begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
read(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
res:=a[1,1]; берем золото из первой клетки
a[1,1]:=0; обнуляем ее
i:=1;j:=1; начальные координаты
read(t); считываем количество клеток в пути
for k:=1 to t-1 do идем по клеткам
begin
read(nap); считываем направление
case nap of
1: begin inc(j);inc(res,a[i,j]);a[i,j]:=0;end; изменяем координаты
2: begin dec(i);inc(res,a[i,j]);a[i,j]:=0;end; берем золото
3: begin dec(j);inc(res,a[i,j]);a[i,j]:=0;end; обнуляем клетку
4: begin inc(i);inc(res,a[i,j]);a[i,j]:=0;end;
end;
end;
close(input);
write(res); выводим результат
close(output);
end.
задачина2массивы
Задача 4 Малыш играет в "Морской бой 1"
Малыш играет в "Морской бой". Поле для игры представляет собой квадрат N x N клеток. На поле отмечены клетки, в которые Малыш уже стрелял. Однако пока он не попал ни в один корабль противника. Требуется определить максимальную длину корабля, который может поместиться в небитых клетках этого поля. Корабль представляет из себя прямоугольник ширины 1 и располагается горизонтально или вертикально. (Гарантируется, что на поле есть хотя бы одна небитая клетка.)
Входные данные
Входной файл содержит в первой строке натуральное число N –размеры поля.
В последующих N строк по N чисел в каждой, числа разделены пробелами. Число 1 означает, что в соответствующую клетку стреляли, число 0 – что в клетку не стреляли.
Выходные данные:
вывести одно число от 1 до N – максимальную возможную длину корабля.
Пример
-
Input.txt
Output.txt
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
9
В решении используем два массива b и c. В массиве b будем длины кораблей по вертикали, а в массиве а по горизонтали. Пробегая по массиву а по строкам, начиная с первой последовательно заполняем массивы а и с , параллельно находя длину самого большого корабля. Для того чтобы не писать условия выхода за пределы массива сделаем окаймление массива нулями.
program malish1;
const nmax=100;
Var
a,b,c:array[0..nmax+1,0..nmax+1] of byte;
i,j,n,max:byte;
Begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
read(n);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
max:=0;
for i:=1 to n do
for j:=1 to n do
if a[i,j]=0 если a[i,j]=0, то длина вертикального и горизонтального
корабля увеличится на 1
then
begin
b[i,j]:=b[i-1,j]+1;
c[i,j]:=c[i,j-1]+1;
if max<b[i,j] then max:=b[i,j];
if max<c[i,j] then max:=c[i,j];
end;
write(max);
close(output);
End.
задачина2массивы
