Cod sursa(job #2408188)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 17 aprilie 2019 18:19:37
Problema Divk Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb

#include <bits/stdc++.h>
using namespace std;
//ifstream f("divk.in");
//ofstream g("divk.out");
int n,k,a,b,x,s;
vector < int >v[100005];

#define dim 100000
char buff[dim];
int p = 0;

void read(int &nr){
	nr = 0;
	while(buff[p] < '0' || buff[p] > '9')
		if(++p == dim)
			fread(buff, 1, dim, stdin), p = 0;
	while(buff[p] >= '0' && buff[p] <= '9'){
		nr = 10 * nr + buff[p] - '0';
		if(++p == dim)
			fread(buff, 1, dim, stdin), p = 0;
	}
}
int Count(int d)
{
    int i,j,p,nr;
    nr=0;
    for(p=0;p<k;p++)
    {
        for(i=0;i<v[p].size();i++)
        {
            j=i+1;
            while(j<v[p].size() && v[p][j]-v[p][i]<=d)
            {
                nr++;
                j++;
            }
        }
    }
    return nr;
}
int main()
{
    int i;
    //f>>n>>k>>a>>b;
    freopen("divk.in", "r", stdin);
	freopen("divk.out", "w", stdout);
	cin>>n>>k>>a>>b;
    v[0].push_back(0);
    for(i=1;i<=n;i++)
    {
        //f>>x;
        read(x);
        s=(s+x)%k;
        v[s].push_back(i);
    }
    cout<<Count(b)-Count(a-1);
    return 0;
}