Cod sursa(job #1777200)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 12 octombrie 2016 09:44:41
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<bits/stdc++.h>
using namespace std;
int n,k;
int v[500005],a,b,x,sum[500005],s,d,frecv[100005],a1,b1,rest;
long long sol;
int main()
{
    freopen("divk.in","r",stdin);
    freopen("divk.out","w",stdout);
    scanf("%d%d%d%d",&n,&k,&a,&b);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        v[i]=x%k;
    }
    for(int i=1;i<=n;i++)
    {
        sum[i]=(sum[i-1]+v[i])%k;
    }
    frecv[0]++;
    a1=0;
    for(int i=a;i<=b;i++)
    {
        x=sum[i];
        sol=sol+frecv[x];
        a1++;
        frecv[sum[a1]]++;
    }
    for(int i=0;i<=k;i++) frecv[i]=0;
    d=b-a+1;
    for(int i=1;i<=d;i++)
    {
        frecv[sum[i]]++;
    }
    a1=1;
    b1=d;
    for(int i=(b+1);i<=n;i++)
    {
        x=sum[i];
        sol=sol+1LL*frecv[x];
        b1++;
        frecv[sum[b1]]++;
        frecv[sum[a1]]--;
        a1++;
    }
    printf("%lld\n",sol);
}