Cod sursa(job #70766)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 7 iulie 2007 10:58:32
Problema Divk Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<fstream.h>
long a[500001],N,A,B,K,c[500001];
void citire(){
ifstream fin("divk.in");
fin>>N>>K>>A>>B;
long x;
for (long i=0;i<N;i++){
  fin>>x;
  a[i]=x%K;}
fin.close();
}
/*long long numar(){
long long S=0,nr=0,S1;
    for (long j=0;j<B;j++)
       S+=a[j];
       S1=S;
    for (long i=B-1;i>=A-1;i--) {
	 if (S1%K==0)
	   nr++;
	   S1-=a[i];          }
    for (long y=1;y<=N-B;y++){
	S1=S+a[y+B-1];
	S1=S1-a[y-1];
	S=S1;
	for (long h=B+y-1;h>=A+y-1;h--){
	     if (S1%K==0)
	       nr++;
	       S1-=a[h];}
	}
S=0;
for (long p=N-B;p<N;p++)
  S+=a[p];
  S1=S;
  for (long u=N-B;u>=N-A;u++){
      if (S1%K==0)
	nr++;
	S1-=a[u];}
for ()

return nr;
}  */
long long numar(){
long long S=0,nr=0;
for (long u=0;u<A;u++)
    S+=a[u];
c[0]=S;
for (long y=1;y<=N-A;y++){
    S=c[y-1]+a[y+A-1]-a[y-1];
    c[y]=S;
    if (c[y]%K==0)
     nr++;}
for (long j=0;j<B-A;j++)
for (long i=0;i<N-A-j;i++){
    c[i]+=a[i+A+j];
    if (c[i]%K==0)
     nr++;}
return nr;
}
int main(){
citire();
ofstream fout("divk.out");
fout<<numar();
fout<<"\n";
fout.close();
return 0;
}