Cod sursa(job #703128)

Utilizator PatrikStepan Patrik Patrik Data 2 martie 2012 11:05:41
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
	#include<stdio.h>
	FILE *f , *g ;
	long n , b , a , k , v[500001] , frec[100001] ;
	long long sol;
	
	void citire();
	void solve();
	void tipar();
	
	int main()
	{
		citire();
		solve();
		tipar();
		return 0;
	}
	
	void citire()
	{
		f=fopen("divk.in" , "r" );
		long nr;
		fscanf(f , "%ld%ld%ld%ld" , &n , &k , &a , &b );
		for( long i = 1 ; i<= n ; ++i )
		{
			fscanf(f , "%ld" , &nr );
			v[i] = (v[i-1]+nr)%k;
			if(v[i] == 0 && i >=a && i <= b)
				sol++;
		}
		fclose(f);
	}
	
	void solve()
	{
		for( long i = a+1 ; i<= n ; ++i )
		{
			frec[v[i-a]]++;
			if(i > b+1)
				frec[v[i-b-1]]--;
			sol+=frec[v[i]];
		}
	}
	
	void tipar()
	{
		g=fopen("divk.out" , "w" );
		fprintf(g , "%lld" , sol);
		fclose(g);
	}