Решение нужно на PascalABC.NET
Лифт в N-этажном доме может перевозить одновременно не более L человек. Расстояние между этажами он проезжает за T секунд. Время на остановку на любом этаже с посадкой пассажира в лифт составляет P секунд. В начальный момент времени лифт без людей находится на последнем этаже (номер N). Одновременно K человек нажимают кнопки вызова на разных K этажах выше первого с целью уехать на 1-й этаж. Лифт едет вниз, останавливаясь на тех этажах, где была нажата кнопка вызова. При каждой остановке входит один человек. Если лифт заполнен, то дальше он едет без остановок. Требуется определить, через какой промежуток времени лифт доедет до первого этажа, а также номер самого высокого из этажей, на которых еще остались люди. Известно, что в течение всего времени новых вызовов или отмены вызовов не происходит.
Формат ввода:
Вначале вводятся целые числа N, L, T, P, K (1≤ N ≤100, 4≤ L ≤12, 1≤ T ≤10, 1≤ P ≤10, 1≤ K ≤100), затем K чисел от N до 2 каждое – номера этажей, с которых был сделан вызов, в порядке убывания.
Формат вывода
Выведите два целых числа: в первой строке количество секунд, через которое лифт доедет на 1-й этаж, во второй строке – номер самого высокого из тех этажей, на которых еще остались люди или NO, если в лифт поместились все желающие.
var s,a:string;
begin
write('Введите строку : ');
readln(s);
write('Введите слово : ');
readln(a);
if(pos(a, s) <> 0) then writeln('Слово "',a,'" в строке есть')
else writeln('В строке такого слова нет');
end.
Тест №1
Введите строку : Привет участникам олимпиады!
Введите слово : ник
Слово "ник" в строке есть
Тест №2
Введите строку : Всем привет!
Введите слово : админ
В строке такого слова нет
Матрицы не очень сложны для понимания и использования. Более того, они нужны для написания быстрых преобразований и очень полезны для представления математических операций в компактной форме.
Матрица - это множество чисел, сгруппированных в колонки и столбцы. Здесь изображены две матрицы: Матрица А и Матрица В.
56_1.gif (1163 b)
Матрица А - это матрица 2х3 (то есть у нее две строки и три столбца), тогда как матрица В - это матрица 3х3. Мы можем получить доступ к элементу матрицы А, используя запись А[m,n], где m - это строка, а n - столбец. Элемент в верхнем углу матрицы А будет обозначаться А[0,0] и он равен единице.
Произведение операций над матрицами
Вы можете производить большинство операций над матрицами так же, как Вы оперируете и с нормальными числами. Например, Вы можете их складывать или вычитать, соответственно складывая или вычитая каждый из компонентов.
Для примера, рассмотрим сложение двух матриц размерностью 2х3 - матрицы А и матрицы С:
56_2.gif (650 b)
При сложении матриц А и С нужно складывать каждый из элементов m, n. Суммы элементов займут в результирующей матрице соответствующие места:
56_3.gif (896 b)
Мы также можем умножить матрицу на скаляр k. Например, чтобы умножить матрицу А на 3, мы должны умножить на 3 каждый ее элемент.
56_4.gif (725 b)
Теперь поговорим об умножении двух матриц. Эта операция немного отличается от умножения на скалярную величину. Вы должны запомнить несколько правил:
Количество столбцов в первой матрице (n) должно быть равно количеству строк во второй (также n). Это значит, что если размерность первой матрицы (m x n), то размерность второй матрицы должна быть (n x r). Два остальных измерения m и к могут быть любыми.
Произведение матриц не коммутативно, то есть А х В не равно В х А.
Умножение матрицы m x n на матрицу n x r может быть описано алгоритмически следующим образом:
Для каждой строки первой матрицы:
Умножить строку на столбец другой матрицы поэлементно. Сложить полученный результат;
Поместить результат в позицию [i,j] результирующей матрицы, где i - это строка первой матрицы, а j - столбец второй матрицы.
Для простоты посмотрите на рисунок:
56_5.gif (4629 b)
Мы можем это сделать намного проще, написав программу на Си. Давайте определим матрицу 3х3 и напишем функцию, умножающую матрицы. Ниже показан исходный код:
// общая структура матрицы
typedef struct matrix_typ
{
float elem[3][3]; // место для хранения матрицы
} matrix, *matrix_ptr;
void Mat_Mult3x3(matrix_ptr matrix_1, matrix_ptr matrix_2,
matrix_ptr result)
{
index i, j, k;
for(i=0; i < 3; j++)
{
for(j=0; j < 3; j++)
{
result[i][j] = 0; // инициализация элемента
for(k = 0; k < 3; k++)
{
result->elem[i][j] += matrix_1->elem[i][k]
* matrix_2->elem[k][j];
} // конец цикла по k
} // конец цикла по j
} // конец цикла по i
} // конец функции
Единичная матрица
Прежде чем закончить говорить о матрицах, скажем еще об одной вещи: о единичной матрице. Не углубляясь в математические термины, я хочу сказать, что нам нужна такая матрица, умножая на которую мы получали бы исходную матрицу.
Говоря попросту, нам нужно иметь матрицу размерностью