Pagini recente » Cod sursa (job #2476840) | Cod sursa (job #2767919) | Cod sursa (job #2275591) | Cod sursa (job #843974) | Cod sursa (job #1552690)
#include<fstream>
#include<vector>
using namespace std;
int n, k, a, b, p, u, mid, x, i, j, sum;
long long sol;
vector< int > v[100005];
ifstream fin("divk.in");
ofstream fout("divk.out");
int main(){
fin>> n >> k >> a >> b;
for(i = 1; i <= n; i++){
fin>> x;
sum = (sum + x) % k;
v[sum].push_back(i);
}
for(i = 0; i < v[0].size(); i++){
if(v[0][i] >= a && v[0][i] <= b){
sol++;
}
}
for(j = 0; j < k; j++){
for(i = 0; i < v[j].size(); i++){
p = i + 1;
u = v[j].size() - 1;
while(p <= u){
mid = (p + u) / 2;
if(v[j][mid] - v[j][i] >= a){
u = mid - 1;
}
else{
p = mid + 1;
}
}
x = p;
p = i + 1;
u = v[j].size() - 1;
while(p <= u){
mid = (p + u) / 2;
if(v[j][mid] - v[j][i] <= b){
p = mid + 1;
}
else{
u = mid - 1;
}
}
sol += u - x + 1;
}
}
fout<< sol <<"\n";
return 0;
}