Cod sursa(job #1329774)

Utilizator PikachuPikachu Pikachu Data 29 ianuarie 2015 20:33:52
Problema Divk Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <cstdio>
#include <vector>

using namespace std;

int s[500005];
vector <int> v[100002];

int main() {
	freopen("divk.in", "r", stdin);
	freopen("divk.out", "w", stdout);

	int n, k, a, b, sol = 0, x, m, aux;

	scanf("%d%d%d%d", &n, &k, &a, &b);

	v[0].push_back(0);

	for(int i = 1; i <= n; ++ i) {
		scanf("%d", &x);
		s[i] = (s[i - 1] + x) % k;
		v[s[i]].push_back(i);
	}

	for(int i = 0; i <= k; ++ i) {
		m = v[i].size();
		for(int j = 1; j < m; ++ j) {
			for(int p = j - 1; p >= 0; -- p) {
				aux = v[i][j] - v[i][p];
				if(aux > b)
					break;
				if(a <= aux && aux <= b) {
					++ sol;
				}
			}
		}
	}

	printf("%d\n", sol);

	return 0;
}