Cod sursa(job #1201008)

Utilizator hrazvanHarsan Razvan hrazvan Data 24 iunie 2014 11:50:57
Problema Divk Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#define MAXN 500000
#define MAXK 100000

long long sum[MAXN];

long long nrsecv(int nr, int n, int k){
  int i, fr[MAXK];
  long long rez = 0;
  for(i = 0; i < MAXK; i++)  fr[i] = 0;
  for(i = 0; i < nr; i++) fr[sum[i]]++;
  rez += fr[0];
  while(i < n){
    fr[sum[i - nr]]--;
    fr[sum[i]]++;
    rez += fr[sum[i - nr]];
    i++;
  }
  for(i = n - nr; i < n - 1; i++){
    fr[sum[i]]--;
    rez += fr[sum[i]];
  }
  return rez;
}

int main(){
  FILE *in = fopen("divk.in", "r");
  int n, k, a, b;
  fscanf(in, "%d%d%d%d", &n, &k, &a, &b);
  int i, x;
  for(i = 0; i < n; i++){
    fscanf(in, "%d", &x);
    if(i != 0)  sum[i] = (sum[i - 1] + x) % k;
    else        sum[i] = x % k;
  }
  fclose(in);
  FILE *out = fopen("divk.out", "w");
  fprintf(out, "%lld", (nrsecv(b, n, k) - nrsecv(a - 1, n, k)));
  fclose(out);
  return 0;
}