Cod sursa(job #2415277)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 25 aprilie 2019 18:20:05
Problema Divk Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include<cstdio>
using namespace std;
const int K=100005;
const int N=500005;
int frv[K];
int sp[N];

FILE*fin,*fout;
const int SIZE = 1024;
char buf[SIZE];
int ptr=SIZE;

char adv(){
  if(ptr==SIZE){
    fread(buf,sizeof(char),SIZE,fin);
    ptr=0;
  }
  return buf[ptr++];
}

int read(){
  int x=0;
  int sign=1;
  char c;

  while(c!='-' && !(c>='0' && c<='9'))
    c=adv();
  while(c=='-'){
    sign*=-1;
    c=adv();
  }
  while(c>='0' && c<='9'){
    x=x*10+c-'0';
    c=adv();
  }
  return x;
}
int main()
{
    fin=fopen("divk.in","r");
    fout=fopen("divk.out","w");
    int n,a,b,k;
    fscanf(fin,"%d%d%d%d ",&n,&k,&a,&b);
    for(int i=1;i<=n;i++){
      int x;
      x=read();
      sp[i]=x+sp[i-1];
      sp[i]%=k;
    }
    long long sol=0;
    for(int i=a;i<=n;i++){
      frv[sp[i-a]]++;
      if(i>b)
        frv[sp[i-b-1]]--;
      sol+=1LL*frv[sp[i]];
    }
    fprintf(fout,"%lld",sol);
    return 0;
}