Cod sursa(job #1540066)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 2 decembrie 2015 00:25:31
Problema Divk Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("divk.in");
ofstream fout("divk.out");

const int NMax = 5e5 + 5;
const int MMax = 1e5 + 5;

int n, k;
int v[NMax], Count[MMax];
long long int Sum[NMax];

inline long long int Solve(const int &x){
    memset(Count, 0, sizeof(Count));
    Count[0] = 1;
    long long int sol = 0;
    for(int i = x, j = 1; i <= n; i++, j++){
        sol += Count[Sum[i] % k];
        Count[Sum[j] % k]++;
    }
    return sol;
}

int pos = MMax - 1;
char Buffer[MMax];
inline void Read(int &x){
    while(!isdigit(Buffer[pos])){
        if(++pos == MMax){
            fin.read(Buffer, MMax);
            pos = 0;
        }
    }
    x = 0;
    while(isdigit(Buffer[pos])){
        x = x * 10 + (Buffer[pos] - '0');
        if(++pos == MMax){
            fin.read(Buffer, MMax);
            pos = 0;
        }
    }
}

int main(){
    int a, b;
    fin >> n >> k >> a >> b;
    for(int i = 1; i <= n; i++){
        fin >> v[i];
        Sum[i] = Sum[i - 1] + v[i];
    }
    fout << Solve(a) - Solve(b + 1);
    return 0;
}