Pagini recente » Cod sursa (job #647912) | Cod sursa (job #3258075) | Cod sursa (job #2287638) | Cod sursa (job #2779178) | Cod sursa (job #3146574)
#include <fstream>
using namespace std;
ifstream cin("divk.in");
ofstream cout("divk.out");
int v[500001];
int sp[500001];
int n, k, a, b;
void two_pointers(int &max_answer, int max_length){
int pointer_left = 1;
int pointer_right = 1;
while (pointer_left <= n){
int answer = sp[pointer_right] - sp[pointer_left - 1];
if (answer % k == 0){
max_answer += 1;
}
if (pointer_right - pointer_left < max_length && pointer_right <= n){
pointer_right++;
} else {
pointer_left += 1;
pointer_right = pointer_left;
}
}
}
int main(){
int raspuns_maxim_b = 0;
int raspuns_maxim_a = 0;
cin >> n >> k >> a >> b;
for (int i = 1; i <= n; i++){
cin >> v[i];
sp[i] = (sp[i - 1] + v[i]) % k;
}
two_pointers(raspuns_maxim_b, b);
two_pointers(raspuns_maxim_a, a - 1);
cout << raspuns_maxim_b - raspuns_maxim_a + 1;
}