Pagini recente » Cod sursa (job #2450465) | Cod sursa (job #1317055) | Cod sursa (job #1356455) | Cod sursa (job #767499) | Cod sursa (job #1234251)
#include <cstdio>
using namespace std;
int spart[500005],frecv[100005];
int main()
{
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
int N,K,A,B;
scanf("%d%d%d%d",&N,&K,&A,&B);
long long sol = 0;
for(int i = 1; i <= N; ++i)
{
scanf("%d",&spart[i]);
spart[i] = ( spart[i] + spart[i-1] ) % K;
/// ma fixez pe secventa i-B-1, i-A astfel eu caut doar secvente de lungime
///intre A si B care se termina pe i
if(i >= A)
frecv[spart[i-A]] ++;
if(i > B)
frecv[spart[i-B-1]] --;
/// adun numarul de aparitii a sumei %K din intervalul : [i-B-1,i-A]
sol += frecv[spart[i]];
}
printf("%lld\n",sol);
return 0;
}