Устав от участия в раундах на Codeforces, Гильдонг решил отдохнуть в парке. Он присел на лавку, и заметил двух кроликов, прыгающих поблизости. Он заметил, что два кролика прыгали навстречу друг другу. Позиции двух кроликов можно задать целочисленными координатами на горизонтальной прямой. Более высокий кролик изначально находится в точке с координатой
, а более низкий — в точке с координатой (<). Каждую секунду, каждый кролик прыгает на другую позицию. Более высокий кролик прыгает в положительном направлении на , а более низкий прыгает в отрицательном направлении на
.
Например, если =0
, =10, =2, и =3. После 1-й секунды, кролики будут в точках 2 и 7. После 2-й секунды, оба кролика будет в точке 4
.
Гильдонг задумался: Будут ли когда-то два кролика в одной точке в один момент времени? Если будут, то через какое время это произойдет ему найти такую секунду, после которой оба кролика будут в одной точке.
Входные данные
Каждый тест состоит из одного или более наборов входных данных. В первой строке записано количество наборов входных данных
(1≤≤1000
).
Каждый набор входных данных состоит из ровно одной строки. Строка состоит из четырех целых чисел
, , , (0≤<≤109, 1≤,≤109
) — текущая позиция более высокого кролика, текущая позиция более низкого кролика, расстояние прыжка более высокого прыжка, расстояние прыжка более низкого кролика, соответственно.
Выходные данные
Для каждого набора входных данных, выведите одно целое число — количество секунд, через которое два кролика окажутся в одной точке.
Если два кролика никогда не окажутся в одной точке одновременно, выведите −1
Язык c++
Решение.
15.1 Следующий алгоритм выполнит требуемую задачу.
нц
пока справа свободно
закрасить
вправо
кц
нц
пока снизу свободно
закрасить
вниз
кц
закрасить
нц
пока не (снизу свободно)
влево
кц
вниз
нц
пока не (справа свободно)
закрасить
вниз
кц
закрасить
вправо
нц
пока не (сверху свободно)
закрасить
вправо
кц
15.2 Решение
var a, s: integer;
begin
s: = 0;
readln(a);
while a<>0 do begin
if (a mod 8=0) and (a mod 10 = 6) then
s : = s + a;
readln(a);
end;
writeln(s)
end.
Для проверки правильности работы программы необходимо использовать следующие тесты:
Входные данные Выходные данные
1
8
6
10
0
0
2
16
0
16
3
16
96
5
0
112
Спрятать критерии
Критерии проверки:
Критерии оценивания выполнения задания 15.
Алгоритм правильно работает при всех допустимых исходных данных 2
При всех допустимых исходных данных верно следующее:
1) выполнение алгоритма завершается, и при этом Робот не разбивается;
2) закрашено не более 10 лишних клеток;
3) остались незакрашенными не более 10 клеток из числа тех, которые должны были быть закрашены
1
Задание выполнено неверно, т. е. не выполнены условия, позволяющие поставить 1 или 0
Максимальный 2
Критерии оценивания выполнения задания 15.
Предложено верное решение. Программа правильно работает на всех приведённых выше тестах. Программа может быть записана на любом языке программирования 2
Программа выдаёт неверный ответ на одном из тестов, приведённых выше. Например, решение, в котором неверно задано условие отбора чисел: (a mod 8=0)or(a mod 10=6), выдаст неправильный ответ на тесте № 1. 1
Программа выдаёт на тестах неверные ответы, отличные от описанных в критерии на 0
Максимальный 2
Теоретический материал (Паскаль)
Понятие двумерного массива. Описание типа массива. Формирование значений элементов массива случайным образом
Одним из основных направлений использования компьютеров является накопление и обработка данных - различных таблиц, справочников, словарей и другой информации. Для представления такой информации в программе удобно использовать массивы. Как правило, обработка таких данных осуществляется по одному и тому же закону, для чего удобно использовать циклические алгоритмы.
Мы уже рассматривали формирование и обработку одномерных массивов. Вспомним, что в массив мы объединяем конечную последовательность компонентов одного типа и даем им общее имя. Каждый отдельный компонент массива называется элементом. Количество элементов называется размером массива. Тип элементов определяет тип массива. Размер и тип массива указываются при его описании, причем размер может быть указан либо конкретным значением, либо ранее определенной константой. Номер элемента называется индексом. Индексы могут быть целыми положительными константами или целыми переменными. Чтобы обратиться к некоторому элементу массива, нужно рядом с идентификатором массива в скобках указать индекс элемента.
Но часто данные могут быть организованы в виде таблицы (матрицы), где расположение каждой переменной определяется номером строки и номером столбца. Например, место в зрительном зале задается указанием номера ряда и номером места в этом ряду. Такие данные удобно описать как двумерный массив. В отличие от одномерного массива каждому элементу двумерного массива соответствует пара индексов. Первый индекс - это номер строки, а второй - номер столбца, где расположен элемент массива.
Размер двумерного массива задается парой чисел: M*N, где M - число строк, а N - число столбцов в таблице.
Пусть задан двумерный массив Matr, имеющий размер 10*20. Этот массив на языке Паскаль может быть описан следующим образом:
Var
Matr : array [1..10,1..20] of integer;