Cod sursa(job #1200999)

Utilizator hrazvanHarsan Razvan hrazvan Data 24 iunie 2014 11:33:50
Problema Divk Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 0.83 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 + 1; i < n; 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);
    sum[i] = (sum[i - 1] + 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;
}