Mai intai trebuie sa te autentifici.
Cod sursa(job #372945)
Utilizator | Data | 12 decembrie 2009 11:37:50 | |
---|---|---|---|
Problema | Divk | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Problemiada - Editia #6 | Marime | 0.75 kb |
#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;
}