Cod sursa(job #1731139)

Utilizator Alexandru_Arama Alexandru Alexandru_ Data 18 iulie 2016 13:31:19
Problema Divk Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <iostream>
#include <fstream>

using namespace std;

long long n,k,a,b,s[500001],i,x,f[500001],f1[500001],ct;
int main()
{
    ifstream fin ("divk.in");
    ofstream fout ("divk.out");
    fin>>n>>k>>a>>b;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        s[i]=s[i-1]+x;
        s[i]%=k;
        if(!f[s[i]]){f1[i]=i,f[s[i]]=i;if(!s[i] && i>=a && i<=b)ct++;}
        else
        {
           f1[i]=f[s[i]];
           f[s[i]]=i;
        }
    }
    for(i=n;i>=1;i--)
    {
        int j;
    j=i;
    while(j!=f1[j] && i-j<=b)
    {
        if(i-j>=a)ct++;
        int t=j;
        j=f1[j];
      //  f1[t]=0;
    }
    if(i-j>=a && i-j<=b)ct++;
    }
    fout<<ct;
    return 0;
}