学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
给定包含
n
n
n个正整数的数列
a
1
,
a
2
,
…
,
a
n
a_1,a_2,\dots,a_n
a1,a2,…,an,解答如下问题:
对于所有满足
1
≤
i
<
j
≤
n
1\le i\lt j\le n
1≤i<j≤n的整数组
(
i
,
j
)
(i,j)
(i,j),求出所有满足“
a
i
−
a
j
a_i-a_j
ai−aj是
k
k
k的倍数”的整数组
(
i
,
j
)
(i,j)
(i,j)的个数。
【输入】
第一行,包含两个正整数
n
,
k
n,k
n,k。
第二行,包含n个正整数
a
1
,
a
2
,
…
,
a
n
a_1,a_2,\dots,a_n
a1,a2,…,an。
【输出】
一个整数表示结果。
【输入样例】
8 2
1 2 3 4 5 6 7 2
【输出样例】
12
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, k;
int cnt[100005]; // cnt[x]余数为x的数的个数
int main()
{
cin >> n >> k; // 输入n和k
for (int i=1; i<=n; i++) { // 遍历n个数
int a;
cin >> a; // 输入数
cnt[a%k]++; // 记录其对k取余后的数量
}
long long ans = 0; // 需要开为long long 类型
for (int i=0; i<k; i++) { // 从0遍历至k-1
ans += 1ll * cnt[i]*(cnt[i]-1)/2; // 如10个余数为1,则有10*9/2种组合
}
cout << ans << endl;
return 0;
}
【运行结果】
8 2
1 2 3 4 5 6 7 2
12