Cod sursa(job #423975)

Utilizator funkydvdIancu David Traian funkydvd Data 24 martie 2010 15:03:54
Problema Divk Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f1 ("divk.in");
ofstream f2 ("divk.out");
int v[600010];
long long s[600010];
vector<int> l[100001];
int nr1,nr2,nr3,nr4;
int main()
{
int n,k,a,b,i,j,p1,p2,k1,k2;
f1>>n>>k>>a>>b;
for (i=1; i<=n; i++) {f1>>v[i]; s[i]=s[i-1]+v[i];}
for (i=0; i<=n; i++) l[s[i]%k].push_back(i);
for (i=0; i<k; i++)
{
	if (l[i].size()>1)
	{
		p1=l[i][0];
		k1=0;
		for (j=1; j<l[i].size(); j++)
		{
			p2=l[i][j];
			k2=j;
			while (p2-p1>b && k1<j) p1=l[i][++k1];
			nr1+=k2-k1;
		}
	}
}
for (i=0; i<k; i++)
{
	if (l[i].size()>1)
	{
		p1=l[i][0];
		k1=0;
		for (j=1; j<l[i].size(); j++)
		{
			p2=l[i][j];
			k2=j;
			while (p2-p1>a-1 && k1<j) p1=l[i][++k1];
			nr2+=k2-k1;
		}
	}
}
f2<<nr1-nr2;
return 0;
}