Pagini recente » Cod sursa (job #2402659) | Cod sursa (job #113998) | Cod sursa (job #2299912) | Cod sursa (job #1310959) | Cod sursa (job #1135257)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int brute(int& n,int& k,int& a,int& b,vector<int>& v) {
int ret = 0;
vector<int> sum(n + 1,0);
for (int i = 1; i <= n; i++) {
sum[i] = (sum[i - 1] + v[i - 1]) % k;
}
auto query = [&](const int& i,const int& j) {
return sum[j] - sum[i - 1] < 0 ? sum[j] - sum[i - 1] + k : sum[j] - sum[i - 1];
};
for (int i = 1; i <= n; i++) {
for (int j = i + a - 1;j <= n && j <= i + b - 1; j++) {
ret += (query(i,j) == 0);
}
}
return ret;
}
long long solve(int& n,int& k,int& a,int& b,vector<int>& v) {
long long ret = 0;
vector<int> sum(n + 1,0);
vector<int> freq(k,0);
for (int i = 1; i <= n; i++) {
sum[i] = (sum[i - 1] + v[i - 1]) % k;
if (i - a > 0) {
freq[sum[i - a + 1]]++;
}
if (i - b > 0) {
freq[sum[i - b]]--;
}
// cout << i - (i - a) << " " << i - (i - b) << "\n";
ret += freq[sum[i]];
}
return ret;
}
int main()
{
ifstream cin("divk.in");
ofstream cout("divk.out");
int N, K, A, B;
cin >> N >> K >> A >> B;
vector<int> v(N);
for (int i = 0; i < N; i++) {
cin >> v[i];
}
cout << solve(N, K, A, B, v) << "\n";
return 0;
}