Cod sursa(job #581594)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 14 aprilie 2011 13:05:40
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<vector>
#define NMAX 100010

using namespace std;

vector<int> a[NMAX];
int n, aa, b, k;

ifstream f("divk.in");
ofstream g("divk.out");

void Citeste()
{
    int x, s=0, i;
    f>>n>>k>>aa>>b;
    a[0].push_back(0);
    for (i=1; i<=n; ++i) 
    {
	  f>>x;
	  s=(s+x)%k;
	  a[s].push_back(i);
    }
}

void Solve()
{
    int i, j, pa, pb, m;
    long long REZ=0;
    for (i=0; i<k; ++i)
    {
	  m=a[i].size(); pa=0; pb=0;
	  for (j=0; j<m; ++j)
	  {
		while (a[i][pa+1]-a[i][j]<aa && pa+1<m) ++pa;
		while	(a[i][pb+1]-a[i][j]<=b && pb+1<m) ++pb;
		if (a[i][pa]-a[i][j]>aa) --pa;
		if (a[i][pb]-a[i][j]>b) --pb;
		if (pa<pb) REZ=REZ+pb-pa;
		if (pa==pb && a[i][j]-a[i][pa]>=aa && a[i][j]-a[i][pa]<=b) ++REZ;
	  }
    }
    g<<REZ<<"\n";
}

int main()
{
    Citeste();
    
    Solve();
    
    f.close();
    g.close();
    return 0;
}