Cod sursa(job #329008)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 4 iulie 2009 13:07:18
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#include<string.h>

FILE*fin=fopen("divk.in","r");
FILE*fout=fopen("divk.out","w");

#define nm 500005

int s[nm],resturi[100005],r[nm],n,k,a,b;

int main()
{
    int i,j,stop,mid,start;
    long long ans=0;
    
    fscanf(fin,"%d%d%d%d",&n,&k,&a,&b);
    
    for(i=1;i<=n;i++)
      fscanf(fin,"%d",&s[i]);          
    
    //solve
    
    start=-1;stop=-1;
    r[0]=0;
    
    
    for(i=1;i<=n;i++)
    {
           
      r[i]=(r[i-1]+s[i])%k;
      
      //bagari
      
      while(i-stop>a)
      {                     
        stop++;
        resturi[r[stop]]++;
      }
      
      //scoateri  
      
      if(i-start>b)
        if(start>=0)   
        {
          resturi[r[start]]--;
          start++;
        }
        else start++; 
      ans+=resturi[r[i]];
    }
    
    fprintf(fout,"%lld",ans);
    
    fclose(fin);
    fclose(fout);
    
    return 0;
}