幼い頃からC++を学びましょう!Xueersi Monkey プログラミングの学習プロセスにおける質問を記録し、あらゆる瞬間を記録します。いかなる侵害も直ちに削除されますので、ご支援のほどよろしくお願いいたします。
概要の投稿を添付します: Little Monkey プログラミング C++ | 概要-CSDN ブログ
[タイトル説明]
n 個の正の整数を含む シーケンス a 1、a 2、…、an が与えられた場合 、次の質問に答えてください。
1≤ i < j ≤ nを満たすすべての 整数グループ ( i , j )について、「 ai + aj は kの倍数」を満たすすべての 整数グループ ( i , j ) の数を求めます。
【入力】
最初の行には、2 つの正の整数 nとkが含まれています。
2 行目には、 n 個の正の整数 a 1、a 2...、an が含まれています。
【出力】
1 行に、結果を表す 1 つの整数。
【入力サンプル】
8 2
1 2 3 4 5 6 7 2
【出力サンプル】
12
【詳しいコード説明】
#include <bits/stdc++.h>
using namespace std;
int n, k;
int a[200005]={0};
long long cnt[200005]={0};
long long ans=0;
int main()
{
cin >> n >> k;
for (int i=1; i<=n; i++) {
cin >> a[i];
cnt[a[i]%k]++;
}
/*
k=6
0 1 2 3 ... k-1
0和3要和自己凑,其他,如1与k-1,2与k-2凑...
*/
for (int i=0; i<=k/2; i++) {
if ((i+i)%k==0) ans += cnt[i]*(cnt[i]-1)/2;
else ans += cnt[i]*cnt[k-i];
}
cout << ans;
return 0;
}
【運用結果】
8 2
1 2 3 4 5 6 7 2
12