- •Оценка эффективности алгоритмов
- •Целочисленная арифметика
- •Дано натуральное число. Выяснить является ли оно палиндромом, то есть читается справа налево и слева направо одинаково
- •Дано натуральное число. Выяснить соотношение между количествами двоек и пятерок в этом числе
- •Найти самую большую и самую маленькую цифры данного натурального числа
- •Выяснить образуют ли цифры натурального числа возрастающую последовательность
- •Формат выходного файла
- •Формат входного файла
- •Формат выходного файла
- •Формат входного файла
- •Формат входного файла
- •Формат выходного файла
- •Длинная арифметика
- •Выходные данные
- •Задачи Задача 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)
- •Формат входного файла
Задача 27 Блохи
На клеточном поле, размером NxM (2≤N,M≤250) сидит Q (0≤Q≤10000) блох в различных клетках. «Прием пищи» блохами возможен только в кормушке – одна из клеток поля, заранее известная. Блохи перемещаются по полю странным образом, а именно, прыжками, совпадающими с ходом обыкновенного шахматного коня. Длина пути каждой блохи до кормушки определяется как количество прыжков. Определить минимальное значение суммы длин путей блох до кормушки или, если собраться блохам у кормушки невозможно, то сообщить об этом. Сбор невозможен, если хотя бы одна из блох не может попасть к кормушке.
Формат входных данных
В первой строке входного файла Input.Txt находится 5 чисел, разделенных пробелом: n, m, s, t, q.
N, M – размеры доски (отсчет начинается с 1); S, T – координаты клетки - кормушки (номер строки и столбца соответственно), Q – количество блох на доске. И далее Q строк по два числа – координаты каждой блохи.
Формат выходных данных
Выходной файл Output.txt содержит одно число – минимальное значение суммы длин путей или –1, если сбор невозможен.
Примеры.
-
Input.txt
Output.txt
4 4 1 1 3
2 3
3 2
3 3
6
5 5 3 4 0
0
В решении используем обход в ширину с использованием двух очередей.
const
nmax=250;mmax=250;
di:array [1..8] of shortint=(1,2,2,1,-1,-2,-2,-1);
dj:array [1..8] of shortint=(-2,-1,1,2,2,1,-1,-2);
var
a:array[-1..nmax+2,-1..mmax+2] of shortint; массив клеточного поля
kol,k,res,kolold,kolnew,n,m,s,t,q:longint; kol-количество блох
i,j:integer; к-номер прыжка
procedure out ; res результат
begin kolold,kolnew-кол-во элементов
assign(output,'output.txt'); в очередях
rewrite(output);
write(res);
close(output);
end;
procedure solve;
var p:integer;
old,new:array[-1..2,-1..1000] of integer; старая и новая очереди
b:array[1..2,1..10000] of byte; массив блох
procedure init;
begin
assign(input,'input.txt');
reset(input);
read(n,m);
read(s,t);
read(q);
for i:=1 to q do read(b[1,i],b[2,i]);
close(input);
end;
begin
init;
for i:=-1 to n+2 do окружаем поле двойным кольцом из -2
for j:=-1 to m+2 do a[i,j]:=-2;
for i:=1 to n do
for j:=1 to m do a[i,j]:=0;
for i:=1 to q do a[b[1,i],b[2,i]]:=-1; вместо блох ставим -1
fillchar(new,sizeof(new),0); очищаем очереди
fillchar(old,sizeof(old),0);
a[s,t]:=-2; на место кормушки ставим -2
old[1,1]:=s;old[2,1]:=t; заносим кормушку в старую очередь
kolold:=1;k:=1;res:=0;
for i:=1 to q do если в кормушке уже есть блохи то их
считаем
if (old[1,1]=b[1,i])and(old[2,1]=b[2,i])
then inc(kol);
repeat повторяем волну до тех пор пока
kolnew:=0; в старой очереди есть элементы
for i:=1 to kolold do пробегаем все элементы старой
очереди
for j:=1 to 8 do просматриваем все возможные ходы
begin из клетки старой очереди
if a[old[1,i]+di[j],old[2,i]+dj[j]]=0 если в клетке куда прыгает блоха 0
then
begin
a[old[1,i]+di[j],old[2,i]+dj[j]]:=k; заносим в клетку номер волны
new[1,kolnew+1]:=old[1,i]+di[j]; и помещаем ее в очередь
new[2,kolnew+1]:=old[2,i]+dj[j];
inc(kolnew);
end;
if a[old[1,i]+di[j],old[2,i]+dj[j]]=-1 если в клетке сидит блоха
then
begin
a[old[1,i]+di[j],old[2,i]+dj[j]]:=k; заносим в клетку номер волны
new[1,kolnew+1]:=old[1,i]+di[j]; и помещаем ее в очередь
new[2,kolnew+1]:=old[2,i]+dj[j];
res:=res+k; увеличиваем результат на к
inc(kol); считаем блоху
inc(kolnew); и увеличиваем кол-во блох в
новой очереди на 1
end;
end;
inc(k); увеличиваем на 1 номер волны
kolold:=kolnew; новую очередь делаем старой
old:=new;
fillchar(new,sizeof(new),0); очищаем новую очередь
until kolold=0;
if kol<q then
begin res:=-1;out;halt;end; если количество найденных
блох меньше количества данных, то
res:=-1 и выходим из программы
end;
begin solve; out;end.
задачина2массивы
Задача 28 Гипер-каналы
«Не плюй в телепорт: вылетит — не поймаешь!»
На зараженной радиацией планете некоторые точки соединены между собой гипер-каналами. Когда человек заходит в гипер-канал в одной точке, он мгновенно оказывается в другой. Все гипер-каналы двусторонние — то есть их можно использовать для перемещения в обоих направлениях (как из первой точки во вторую, так и из второй в первую).
К сожалению, гипер-каналы платные — каждый проход через гипер-канал стоит 10 у.е. Перемещаться по поверхности планеты из одной точки в другую, не используя гипер-каналы, чревато для здоровья (радиация, однако!).
Напишите программу, которая определит, какой минимальной суммой у.е. должен располагать путешественник, чтобы добраться из одной точки в другую, не рискуя своим здоровьем.
