Cod sursa(job #337465)

Utilizator rumburakrumburak rumburak Data 3 august 2009 18:54:02
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>
#include<vector>

using namespace std;

const int K = (1<<17);
vector<int> v[K];
int n,k,a,b;

void citire()
{
	int i,x,s=0;
	char sir[10],*p;
	scanf("%d%d%d%d\n",&n,&k,&a,&b);
	v[0].push_back(0);
	for(i=1;i<=n;++i)
	{
		fgets(sir,10,stdin);
		for(x=0,p=sir;*p && *p!='\n';++p)
			x=x*10+*p-'0';
		//scanf("%d",&x);
		s+=x;
		s%=k;
		v[s].push_back(i);
	}
}

void calcul()
{
	long long rez=0;
	int i,j,pa,pb;
	for(i=0;i<k;++i)
	{
		pa=pb=0;
		n=v[i].size();
		for(j=0;j<n;++j)
		{
			while(pa!=n && v[i][pa]-v[i][j]<a)
				++pa;
			while(pb!=n && v[i][pb]-v[i][j]<=b)
				++pb;
			rez+=pb-pa;
		}
	}
	printf("%lld\n",rez);
}

int main()
{
	freopen("divk.in","r",stdin);
	freopen("divk.out","w",stdout);
	citire();
	calcul();
	return 0;
}