Программирование, паскаль/питон
на фкн вшэ после 2 курса студенты выбирают себе специализацию. каждый студент составляет список приоритетов специализаций, на которые он хотел бы попасть. кроме того, у каждого студента есть его позиция в рейтинге (зависит от среднего за время обучения, у некоторых студентов позиция может совпадать). на каждой специализации есть максимальное количество студентов, которые могут быть на неё приняты.
справедливо распределить студентов в соответствие с их пожеланиями. необходимо чтобы для каждого студента выполнялось следующее утверждение: после распределения студента на специализацию на более приоритетных для него специализациях не должно быть ни одного студента, с позицией в рейтинге больше чем у него. при этом из всех распределений необходимо выбрать такое, в котором наибольшее число студентов было распределено по специализациям.
формат входных данных
в первой строке задается два числа: n и k (1 ≤ n, k ≤ 1) — количество студентов и специализаций соответственно.
в следующей строке задается k натуральных чисел si (1 ≤ si ≤ 1), где si — количество студентов, которые готова принять специализация номер i.
в следующих n строках содержится описание приоритетов для каждого из студентов. описание состоит из числа r (1 ≤ r ≤ n) — позиции студента в рейтинге, числа t (1 ≤ t ≤ n) — количества желаемых специализаций и t чисел от 1 до k — номера желаемых специализаций в порядке убывания приоритета. номера специализаций не повторяются. гарантируется, что сумма t для всех студентов не превосходит 106.
формат результата
для каждого из n студентов выведите номер специализации, на которую он будет распределен. в случае, если на всех желаемых специализациях все места заняты студентами с более высокой позицией в рейтинге, то для студента следует вывести число -1. если правильных ответов несколько — выведите любой из них.
uses crt;
Var mas:array[1..1000, 1..1000] of integer;
N,M,i,j,k:integer;
Begin
Writeln('Введите размер матрицы N*M');
Write('N = ');
readln(N);
Write('M = ');
readln(M);
if (M>1000) or (N>1000) or (M<1) or (N<1)
then
Writeln('Ошибка, указанные значения выходят за пределы матрицы') else
Begin
Writeln('Введите элементы матрицы');
k:=0;
for i:=1 to N do
for j:=1 to M do
Begin
readln(mas[i,j]);
if (mas[i,j] mod 2 = 0) then k:=k+1;
end;
Writeln();
Writeln('Исходная матрица');
for i:=1 to N do
Begin
for j:=1 to M do
Begin
Write(mas[i,j], ' ')
end;
Writeln();
end;
Writeln();
Writeln('Количество четных элементов = ',k);
end;
readln;
end.
Формула вычисления объема параллелепипеда
Общая формула Объем любого параллелепипеда равняется произведению площади его основания на высоту. V = Sосн ⋅ h. ...
Объем прямоугольного параллелепипеда Объем фигуры равен произведению его длины на ширину на высоту. V = a ⋅ b ⋅ c.
Объяснение:
Формула вычисления объема параллелепипеда
Общая формула Объем любого параллелепипеда равняется произведению площади его основания на высоту. V = Sосн ⋅ h. ...
Объем прямоугольного параллелепипеда Объем фигуры равен произведению его длины на ширину на высоту. V = a ⋅ b ⋅ c.