Pagini recente » Cod sursa (job #1756794) | Cod sursa (job #2559158) | Cod sursa (job #1864270) | Cod sursa (job #2870253) | Cod sursa (job #85357)
Cod sursa(job #85357)
#include<stdio.h>
int n, k, a, b, i, p1, j, s, s1, s2, cit, v[1000];
char (*de)[100000] = new char [100000][100000];
int gs(int b){
int s1 = 0;
for (i=0; i<k; i++){
p1 = 1;
for (j=2; j<=v[i]; j++)
if ((de[i][j]-'0')-(de[i][p1]-'0') > b){
p1 ++;
if (j-p1-1 > 0)
s1 += j-p1-1;
while ((de[i][j]-'0')-(de[i][p1]-'0') > b && p1+1 < j){
p1 ++;
s1 += j-1-p1;
}
if ((de[i][j]-'0')-(de[i][p1]-'0') <= b && p1 < j)
s1 ++;
}
else
s1 ++;
for (j=p1+1; j<v[i]; j++)
s1 += v[i]-j;
}
return s1;
}
int main()
{
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
scanf("%d%d%d%d", &n, &k, &a, &b);
v[0] = 1;
de[0][1] = 48;
for (i=1; i<=n; i++){
scanf("%d", &cit);
s += cit;
de[s % k][++v[s % k]] = i+48;
}
s1 = gs(b);
s2 = gs(a-1);
if (s1 - s2 < 0)
s1 = s2;
printf("%d\n", s1-s2);
fclose(stdin);
fclose(stdout);
return 0;
}