Присоединиться

11 класс·средний уровень

Необходимо определить количество пар элементов этой последовательности

Условие

Дана последовательность N целых положительных чисел. Необходимо определить количество пар элементов этой последовательности, сумма которых делится на m = 80 и при этом хотя бы один элемент из пары больше b = 50. Входные данные.

Файл AФайл BВ первой строке входных данных задаётся количество чисел N (2 ≤ N ≤ 10 000). В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000.Пример организации исходных данных во входном файле:640401203050110Пример выходных данных для приведённого выше примера входных данных:3 В ответе укажите два числа: сначала количество пар для файла А, затем для файла B. Ответ: Пояснение. Из данных шести чисел можно составить три пары, удовлетворяющие условию: (40, 120), (40, 120), (50, 110). У пар (40, 40) и (30, 50) сумма делится на 80, но оба элемента в этих парах не превышают 50.

Ответ

Ответ и полный разбор откроются после входа

Посмотреть ответ

Решение по шагам

  1. Как рассуждать

    Решение. Сумма двух элементов кратна m, если сумма их остатков от деления на m равна m или 0.Создадим два массива по m элементов в каждом и будем хранить в них количество элементов последовательности, имеющих соответствующий остаток от деления на m; в массиве a0 будем подсчитывать элементы, не превышающие b, в массиве a1 — превышающие.

    После завершения ввода количество подходящих пар с меньшим остатком p от 1 до 39 можно подсчитать по формуле:(a0[p] + a1[p])*a1[m−p] + a1[p]*a0[m−p].Для остатков 0 и 40 остаток у чисел из пары совпадает, поэтому количество пар для этих остатков равно:a0[p]a1[p] + a1[p](a1[p]−1)/2.Общее количество пар можно найти как сумму пар по всем остаткам. Ниже приведена программа на алгоритмическом языке, реализующая этот алгоритм. Приведём решение задачи на языке PascalABC.const m = 80;const b = 50;var a0: array[0..m-1] of integer; a1: array[0..m-1] of integer; i, N: integer; x: integer; p: integer; s: integer; f: text;begin for i := 0 to m-1 do begin a0[i] := 0; a1[i] := 0; end; assign(f,'28130_A.txt'); reset(f); readln(f, N); for i := 0 to N-1 do begin readln(f, x); p:= x mod m; if x <= b then a0[p] := a0[p]+1 else a1[p] := a1[p]+1; end; p := 0; s := a0[p]a1[p] + ((a1[p](a1[p]-1)) div 2); p := m div 2; s := s + a0[p]a1[p] + ((a1[p](a1[p]-1)) div 2); for p := 1 to ((m div 2)-1) do s := s + (a0[p]+a1[p])*a1[m-p] + a1[p]*a0[m-p]; writeln(s);end. В результате работы данного алгоритма при вводе данных из файла A ответ — 3, из файла B —

Осталось ещё 4 шага

  1. Приведём решение задачи Давида Шамугия на…

  2. Примечание. Путь к файлу необходимо указать…

  3. and ((x > b) or (y >…

  4. and ((x > b) or (y > b));end).Print;end…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Программирование»

Необходимо определить количество пар элементов этой последовательности — решение с объяснением | Lom Ai