Pagini recente » Cod sursa (job #362173) | Cod sursa (job #1436462) | Cod sursa (job #3282119) | Cod sursa (job #694063) | Cod sursa (job #1548154)
#include <fstream>
#include <cstring>
#include <vector>
#define NMAX 500005
using namespace std;
ifstream f("divk.in");
ofstream g("divk.out");
vector <vector <int> > aux;
int v[NMAX] , p[NMAX] , dp[NMAX];
int n , k , a , b;
int solve(int nr);
int main() {
int sum = 0;
f >> n >> k >> a >> b;
aux.resize(n + 5);
aux[0].push_back(0);
for(int i = 1 ; i <= n ; ++i) {
f >> v[i];
sum += v[i];
aux[sum % k].push_back(i);
}
int sol = solve(b) - solve(a - 1);
g << sol;
return 0;
}
int solve(int nr) {
int sum = 0 , sol = 0;
memset(p , 0 , sizeof(p));
memset(dp , 0 , sizeof(dp));
dp[0] = 1;
for(int i = 1 ; i <= n ; ++i) {
sum += v[i];
++dp[sum % k];
while(p[sum % k] < aux[sum % k].size() && aux[sum % k][p[sum % k]] < i - nr) {
++p[sum % k];
--dp[sum % k];
}
sol += dp[sum % k] - 1;
}
return sol;
}