Cod sursa(job #497965)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 3 noiembrie 2010 19:58:30
Problema Divk Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;

vector<int> v[100000];
int solve(const int& L,const int& k)
{
	int count=0;
	
	for(int i=0;i<k;i++)
	{
		int p1=0,p2=1;
		
		for(;;)
		{
			if(p2>=(int) v[i].size())
				break;
			while(v[i][p2]-v[i][p1]>L && p1<p2)
				++p1;
			count+=p2-p1;
			++p2;
		}
	}
	for(int i=0;i<(int) v[0].size();i++)
	{
		if(v[0][i]<=L)
			++count;
		else
			break;
	}	
	return count;
}

int main()
{
	ifstream in("divk.in");
	ofstream out("divk.out");
	
	int n,k,A,B,nr;
	in>>n>>k>>A>>B;
	in>>nr;
	int s=nr%k;
	v[s].push_back(0);
	
	for(int i=1;i<n;i++)
	{
		in>>nr;
		s+=nr;
		s%=k;
		v[s].push_back(i);
	}	
	out<<solve(B,k)-solve(A-1,k)<<endl;
	in.close();
	out.close();
}