Pagini recente » Cod sursa (job #1598904) | Cod sursa (job #926613) | Cod sursa (job #612807) | Cod sursa (job #2107305) | Cod sursa (job #2525346)
#include <vector>
#include <fstream>
using namespace std;
ofstream cout("divk.out");
int n, k, a, b;
unsigned long long sequences = 0;
struct node {
node *next = NULL;
int val = 0;
};
node *mem = new node[700000];
struct distances {
node *far = NULL, *close = NULL, *last = NULL;
int fari = 0, closei = 0;
void process(int i) {
last->next = mem;
last = mem++;
last->val = i;
while((far->next != NULL) && ((i - far->next->val + 1) > b)){
far = far->next;
fari++;
}
while((close->next != NULL) && ((i - close->next->val + 1) >= a)){
close = close->next;
closei++;
}
sequences += (closei - fari);
}
distances(){
far = mem++;
close = far;
last = close;
}
};
distances sums[100001];
int main() {
auto F = fopen("divk.in", "r");
fscanf(F, "%d%d%d%d", &n, &k, &a, &b);
a++;
b++;
sums[0].process(0);
for(int x = 1, tmp, last = 0; x<=n; x++) {
fscanf(F, "%d", &tmp);
last += tmp;
last %= k;
sums[last].process(x);
}
cout<<sequences<<endl;
}