Little Monkey プログラミング C++ | K の倍数 (2)

幼い頃からC++を学びましょう!Xueersi Monkey プログラミングの学習プロセスにおける質問を記録し、あらゆる瞬間を記録します。いかなる侵害も直ちに削除されますので、ご支援のほどよろしくお願いいたします。

概要の投稿を添付します: Little Monkey プログラミング C++ | 概要-CSDN ブログ


[タイトル説明]

n 個の正の整数を含む シーケンス a 1、a 2、…、an が与えられた場合 、次の質問に答えてください。

1≤ i < jnを満たすすべての 整数グループ ( i , j )について、「 ai + aj は kの倍数」を満たすすべての 整数グループ ( i , j ) の数を求めます。

【入力】

最初の行には、2 つの正の整数 nkが含まれています。

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

おすすめ

転載: blog.csdn.net/guolianggsta/article/details/133930332