プレフィックスと差動 - オリジナルタイトルシーケンスブルーブリッジ

N列の長さを考えると、A1、A2、... AN、連続したサブ愛あれば、愛+ 1、
... Ajと(I <= J)の和Kの倍数である、我々はこの区間を呼び出します[ I、J]はK倍の範囲である。あなたはそれ間隔K倍の合計数の列の数を見つけることができますか?

入力フォーマット:

最初の行は二つの整数NとK.が含まれています (1 <= N、K <= 100000)以下のNラインは整数愛を含んでいます。(1 <=あい<= 100000)

出力フォーマット:

出力回数K間隔の数を表す整数。

サンプル入力:

ここでは、入力のセットを与えられています。例えば:

5 2 1 2 3 4 5

出力例:

出力に対応し、ここで考えます。例えば:

6

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<vector>
#include<cstring>
#define M 1e6+5
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn = 100005;
ll a[maxn];
ll col[maxn];
int main(){
    int n,k;
    cin >> n >> k;
    for(int i=1; i<=n; i++)
        scanf("%lld",&a[i]);
    for(int i=1; i<=n; i++){
        a[i] += a[i-1];
        col[a[i]%k]++;
    }
    ll ans = 0;
    ans += col[0];
    for(int i=0; i<k; i++)
        ans += col[i] * (col[i]-1) /2;
        //c(col[i],2) c(n,2) = n*(n-1)/2
    cout << ans << endl;
    return 0;
}

注:
LL A [MAXN];
LL COL [MAXN];
マスト両方長い長いそうでない場合、エラー

公開された62元の記事 ウォンの賞賛0 ビュー1747

おすすめ

転載: blog.csdn.net/jhckii/article/details/104414433
おすすめ