нужно программу на с++ перевести var rem : array[0..11] of integer;
N, i, x : integer;
m : longint;
begin
for i := 0 to 11 do
rem[i] := 0;
readln(N);
for i := 1 to N do begin
readln(x);
inc(rem[x mod 12])
end;
m := (rem[0] * (rem[0] - 1) + rem[6] * (rem[6] - 1)) div 2;
for i := 1 to 5 do
m := m + rem[i] * rem[12 - i];
writeln(m)
end.
Дан набор из
N
натуральных чисел. Необходимо определить количество пар элементов
(
a
i
,
a
j
)
этого набора, в которых
1
≤
i
<
j
≤
N
и сумма элементов кратна 12.
Напишите эффективную по времени и по памяти программу для решения этой задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел
N
в
k
раз время работы программы увеличивается не более чем в
k
раз. Программа считается эффективной по памяти, если память, необходимая для хранения переменных программы, не превышает одного килобайта и не увеличивается с ростом
N
.
Описание входных и выходных данных
В первой строке входных данных задаётся количество чисел
N
(
1
≤
N
≤
10000
). В каждой из последующих
N
строк записано одно натуральное число, не превышающее 1000.
Пример входных данных:
5
7
5
6
12
24
Пример выходных данных для приведённого выше примера входных данных:
2
В приведённом наборе из 5 чисел имеются две пары
(
5
,
7
)
,
(
12
,
24
)
, сумма элементов которых кратна 12.
#include <iostream>
using namespace std;
int main() {
int rem[12];
int N, i, x;
unsigned __int64 m;
for (i = 0; i < 12; i++) {
cin >> x;
rem[x % 12]++;
}
m = (rem[0] * (rem[0] - 1) + rem[6] * (rem[6] - 1)) / 2;
for (i = 1; i <= 5; i++) {
m = m + rem[i] * rem[12 - i];
}
cout << m;
return 0;
}