Cod sursa(job #2009271)

Utilizator shantih1Alex S Hill shantih1 Data 9 august 2017 05:40:06
Problema Divk Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

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

int n, k, a, b, c, sum, v[500004], f[500005], r[500005], s[500005], j, i, nr, x, y, cat;

int main () {

    //fin >> n >> k >> a >> b;
    
    //while (nr == sum)
    //{
        nr = sum = 0;
        
        /*for (i = 1; i <= 20 ; i++)
            s[i] = 0;
        
        srand((int)time(0));
        k = a = b = 100;
        while (n % 10 <= 6)   n = rand() % 10;
        while (k % 10 < 2) k = rand() % 10;
        while (a % 10 < 2 || a % 10 > 6)    a = rand() % 10;
        while (b % 10 <= a || b == 100 || b > n) b = rand() % 10;
        
        for (i = 1; i <= n; i++)
            v[i] = rand() % 10 + 1;*/
    
        fin >> n >> k >> a >> b;
        x = a;  y = b;
        
        for (i = 1; i <= n; i++)
        {
            fin >> v[i];
            s[i] += s[i-1]+v[i];
            v[i] += v[i-1];
            v[i-1] %= k;
        }
        v[n] %= k;
    
        c = b-a+1;
        for (i = 1; i <= n; i++)
        {
            f[v[i]]++;
            if (i > c) f[v[i-c]]--;
            
            if (i+a <= n)   r[i+a] = f[v[i+a]];
            
            if (v[i] == 0 && i <= b && i >= a)
                r[i]++;
            
            sum += r[i];
        }

        //cout << sum << " " << nr << "\n";
        cat++;
    //}
    
    /*cout << "Dupa " << cat << " incercari: \n";
    
    cout << "n = " << n << " " << "k = " << k << "a = " << a << " " << "b = " << b << " \n";
    for (i = 1; i <= n; i++)
        cout << s[i] << " ";    cout << "\n";
    for (i = 1; i <= n; i++)
        cout << v[i] << " ";    cout << "\n\n";
    cout << "Al meu: "<< sum << "\n";
    cout << "Corect: "<< nr << "\n";*/
    
    fout << sum << "\n";
}