Cod sursa(job #2865842)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 9 martie 2022 11:08:04
Problema Divk Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

class divk{
private:
    FILE *fin;
    char *buff;
    int sp;
    char read_ch(){
    ++sp;
    if(sp==4096){
        sp=0;
        fread(buff,1,4096,fin);
    }
    return buff[sp];
    }
public:
    divk(const char *name){
    fin=fopen(name,"r");
    buff=new char[4096]();
    sp=4095;
    }
    divk& operator >>(int &n){
    char c;
    while(!isdigit(c=read_ch()));
    n=c-'0';
    while(isdigit(c=read_ch()))
        n=n*10+c-'0';
    return *this;
    }
}fin("divk.in");

const int mx = 5e5 + 5;

int n,k,a,b;
int sum[mx];
int fr[mx];

int main()
{
    freopen("divk.out","w",stdout);
    cout.tie(nullptr);
    fin >> n >> k >> a >> b;
    for(int i=1;i<=n;++i){
        int x;
        fin >> x;
        sum[i]=(sum[i-1]+x)%k;
    }
    long long int ans = 0;
    for(int i=a;i<=n;++i){
        if(i-b-1>=0)fr[sum[i-b-1]]--;
        fr[sum[i-a]]++;
        ans += fr[sum[i]];
    }
    cout << ans;
}