Cod sursa(job #581768)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 14 aprilie 2011 16:04:48
Problema Divk Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
# include <stdio.h>
long long n, K, A, B, lung, sol, i, cit;
long long v[500010], ap[100010];
bool bs (long long st, long long dr, long long find){
	long long i, cnt = 1 << 30;
	for (i = st; cnt > 0; cnt = cnt >> 1)
		if (i + cnt <= dr){
			if (v[i + cnt] <= find){
				i += cnt;
			}
		}
	if (v[i] == find) return true;
	return false;
}
long long maxim (long long a, long long b){
	if (a > b) return a;
	return b;
}
int main (){
	freopen ("divk.in", "r", stdin);
	freopen ("divk.out", "w", stdout);
	scanf ("%lld%lld%lld%lld", &n, &K, &A, &B);
	for (i = 1; i <= n; ++i){
		scanf ("%lld", &cit);
		v[i] = (v[i - 1] + cit) % K;
	}
	for (i = A; i <= n; ++i){
		++ap[v[i - A + 1]];
		if (i - B > 0)
			--ap[v[i - B]];
		sol = sol + ap[v[i]];
	}
	printf ("%lld\n", sol);
	return 0;
}