Cod sursa(job #1713447)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 5 iunie 2016 16:48:03
Problema Divk Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>
#include <algorithm>
#define MAX 4000000
#define INF 200000005
using namespace std;
  
char f[MAX];
int pos=0,N,K,A,B,v[500005]={},set[100005]={};
long long S=0;
void r(int &nr)
{
    nr=0;
    while(f[pos]<'0'||f[pos]>'9')
        pos++;
    while(f[pos]>='0'&&f[pos]<='9')
        nr=nr*10+f[pos++]-'0';
}
 
int main()
{
    freopen("divk.in","r",stdin);
    freopen("divk.out","w",stdout);
  
    fread(f,1,MAX,stdin);
	r(N);r(K);r(A);r(B);
	for(int i=1;i<=N;i++)
	{
		r(v[i]);
		v[i]+=v[i-1];
		v[i]%=K;
	}
	for(int i=A;i<=B;i++)
		set[v[i]]++;

	S=set[v[1]];
	for(int i=2;i<=N-B+1;i++)
	{
		set[v[i+A-2]]--;
		set[v[i+B-1]]++;
		S+=set[v[i]];
	}
	for(int i=N-B+2;i<=N-A+2;i++)
	{
		set[v[i+A-2]]--;
		S+=set[v[i]];
	}
	printf("%lld\n",S);
    return 0;
}