Cod sursa(job #1566119)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 11 ianuarie 2016 20:01:37
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>
#include <vector>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define Nmax 500001
#define Kmax 100000

int n, k;
int s[Nmax];
int nr[Kmax];

ll secv(int) ;

int main()
{
    ifstream fin("divk.in");
    ofstream fout("divk.out");
    
    int a, b, x;
    
    fin >> n >> k >> a >> b;
    for(int i = 1; i <= n; ++i) {fin >> x; s[i] = (s[i - 1] + x) % k;}
    
    fout << secv(b) - secv(a - 1) << '\n';
    
    return 0;
}

ll secv(int lgMax)
{
	int i;
	ll rez;
	
	fill(nr, nr + k, 0);
	for(rez = 0, i = 0; i <= n; ++i)
	{
		rez += nr[s[i]];
		nr[s[i]]++;
		
		if(i >= lgMax) nr[s[i - lgMax]]--;
	}
	
	return rez;
}