Pagini recente » Istoria paginii utilizator/beluga | Profil Abinatore | Cod sursa (job #204624) | Istoria paginii concursuri-virtuale | Cod sursa (job #811282)
Cod sursa(job #811282)
#include <cstdio>
const int MAX_SIZE(500001);
const int MAX_K(100000);
int sum [MAX_SIZE];
int reminder [MAX_K];
int n, k, a, b;
unsigned int subsequences;
inline void read (void)
{
std::freopen("divk.in","r",stdin);
std::scanf("%d%d%d%d",&n,&k,&a,&b);
int number;
for (int index(1) ; index <= n ; ++index)
{
std::scanf("%d",&number);
sum[index] = (sum[index - 1] + number) % k;
}
std::fclose(stdin);
}
inline void dynamic (void)
{
for (int index(a) ; index <= n ; ++index)
{
if (index > b)
--reminder[sum[index - b - 1]];
++reminder[sum[index - a]];
subsequences += reminder[sum[index]];
}
}
inline void print (void)
{
std::freopen("divk.out","w",stdout);
std::printf("%u\n",subsequences);
std::fclose(stdout);
}
int main (void)
{
read();
dynamic();
print();
return 0;
}