Cod sursa(job #481837)

Utilizator bog29Antohi Bogdan bog29 Data 1 septembrie 2010 19:43:22
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<fstream>
#include<vector>
#include<algorithm>
#define dmax 500003
#define nmax 100003
using namespace std;
ifstream in("divk.in");
ofstream out("divk.out");

long long sol;
int n,a,b,k,s[dmax],v,r;

vector<int>h[nmax];
vector<int>::iterator it,ir;

int main()
{	int i;
	in>>n>>k>>a>>b;
	
	h[0].push_back(0);
	for(i=1;i<=n;i++)
	{	in>>v;
		s[i]=(s[i-1]+v)%k;
		r=s[i]%k;
		h[r].push_back(i);
	}
	in.close();
	
	for(i=1;i<=n;i++)
	{	r=s[i]%k;
		if(!h[r].empty() )
		{	
			it=lower_bound(h[r].begin(),h[r].end(), i-b);
			ir=lower_bound(h[r].begin(),h[r].end(), i-a+1);
			sol+=(ir-it);
		}
	}
	
	out<<sol;
	
	out.close();
	return 0;
}