Pagini recente » Cod sursa (job #2912143) | Istoria paginii runda/cateva_probleme_de_incalzire/clasament | Arhiva de probleme | Cod sursa (job #221251) | Cod sursa (job #372945)
Cod sursa(job #372945)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
#define MAX_N 500002
int S[MAX_N];
int N,K,a,b;
vector<int>A[MAX_N];
ifstream f("divk.in");
ofstream g("divk.out");
long long unsigned q(int x, int i, int j)
{
int p = (int)(lower_bound(A[x].begin(), A[x].end(), i) - A[x].begin());
int k = (int)(upper_bound(A[x].begin(), A[x].end(), j) - A[x].begin()) - 1;
if(p > k) return 0;
return (long long unsigned)(k - p +1);
}
int main()
{
f>>N>>K>>a>>b;
int i,x,p;
long long unsigned sol = 0;
for(i = 1; i <= N; ++i)
{
f>>x;
S[i] = (S[i-1] + x)%K;
A[S[i]].push_back(i);
}
for(i = 1; i + a - 1 <= N; ++i)
{
p = min(N, i + b -1);
sol += q(S[i-1], i + a - 1, p);
}
g<<sol<<"\n";
return 0;
}