Cod sursa(job #328998)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 4 iulie 2009 12:42:03
Problema Divk Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 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 ans=0,i,j,stop,mid,start;
    
    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=0;mid=0;
    resturi[0]=1;
    
    
    for(i=1;i<=n;i++)
    {
      stop++;
      
      r[i]=(r[i-1]+s[i])%k;
      
      //bagari
      
      while(stop-(mid+1)+1>a)
      {                     
        mid++;
        resturi[r[mid]]++;
      }
      
      //scoateri  
      
      if(stop-start+1>b)
      {
        start++;
        resturi[r[start]]--;
      }  
      
      ans+=resturi[r[i]];
    }
    
    fprintf(fout,"%d",ans);
    
    fclose(fin);
    fclose(fout);
    
    return 0;
}