Cod sursa(job #2523421)

Utilizator memecoinMeme Coin memecoin Data 14 ianuarie 2020 07:22:58
Problema Divk Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <set>
#include <map>
#include <string.h>
#include <queue>

using namespace std;

#ifdef DEBUG
string name = "data";
#else
string name = "divk";
#endif

ifstream fin(name + ".in");
ofstream fout(name + ".out");

int s[500005];
int f[100005];

int n,k;

int64_t sum(int a, int b) {
    memset(f, 0, sizeof(f));
    
    if (b < 1 || a > b) {
        return 0;
    }
    
    int64_t result = 0;
    for (int i = 1; i <= n; ++i) {
        
        f[s[i]]++;
        
        if (i > b) {
            f[s[i - b]]--;
        }
        
        if (i >= a) {
            result += f[s[i]] - 1;
        }
        
        if (i >= a && s[i] == 0) {
            result++;
        }
    }
    
    return result;
}

int main() {
    
    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 << (sum(a, b) - sum(1, a - 1));
    
    return 0;
}