Cod sursa(job #2524610)

Utilizator eugen5092eugen barbulescu eugen5092 Data 15 ianuarie 2020 22:05:40
Problema Divk Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;
ifstream ci("divk.in");
ofstream cou("divk.out");
int a,b,k,v[500005],n;
vector<int>rs[100005];
int m[100005];
void citire(){
ci>>n>>k>>a>>b;
for(int i=1;i<=n;i++){
    ci>>v[i];
}

}

void resturi(){
int i,r;

for(i=1;i<=n;i++){
    v[i]=(v[i]+v[i-1])%k;
}

for(i=1;i<=n;i++){
    r=v[i]%k;
    rs[r].push_back(i);
    m[r]++;
}

for(i=0;i<=k-1;i++){
    rs[i].push_back(0);
}
/*
for(i=0;i<=k-1;i++){
    for(int j=0;j<m[i];j++ ){
        cout<<rs[i][j]<<" ";
    }
    cout<<"\n";
}*/

//cout<<"\n\n\n";

}




void rez(){
int i,j,s=0,j1,j2,j3=0;
for(i=0;i<=k-1;i++){
        //s=0;
        j3=0;
    for( j=0;j<m[i];j++){
            j1=0;
            j2=0;

   if(m[i]>=2){
        j1=j;
    if(rs[i][j+1]-rs[i][j]+1<=b&& a<=1+rs[i][j+1]-rs[i][j]){
       while((rs[i][j+1]-rs[i][j1]+1<=b&& a<=1+rs[i][j+1]-rs[i][j1])){
        j++;
       }
   j2=j;
       s+=(j2-j1+1)*(j2-j1)/2-(j3-j1+1)*(j3-j1)/2;
     //  cout<<j1<<" "<<j2<<" "<<j3<<" "<<s<<"\n";
       j3=j;

       j=j1;

    }


   }
}
//cout<<i<<" "<<s<<"\n";
}
cou<<s;


}


int main()
{
    citire();
    resturi();
    rez();
    return 0;
}