Cod sursa(job #2666238)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 1 noiembrie 2020 11:28:16
Problema Secventa 5 Scor 30
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>
#define at20 1048576
#define FUNCTIE 10007///functia hash va fi %FUNCTIE

unsigned int h[FUNCTIE][1001];
int v[at20];
short p[FUNCTIE][1001];
///Pe 0 voi tine marime a hashului
int exista(unsigned int x){
  unsigned int i=x%FUNCTIE,j,poz;
  poz=0;
  for(j=1;j<=h[i][0];j++)
    if(h[i][j]==x)
      poz=j;
  return poz;
}

void add(unsigned int x,int j){
  unsigned int i=x%FUNCTIE,poz=exista(x);
  h[i][0]++;
  h[i][h[i][0]]=x;
  p[i][h[i][0]]=j;
  v[j]=-1;
  if(poz!=0)
    v[j]=p[i][poz];
}

int main(){
  FILE *fin, *fout;
  int n,i,j,l,u;
  unsigned int x;
  long long sum,s;
  fin=fopen("secv5.in","r");
  fscanf(fin,"%d%d%d",&n,&l,&u);
  for(i=0;i<n;i++){
    fscanf(fin,"%d",&x);
    add(x,i);
  }
  fclose(fin);

//  for(i=0;i<n;i++)
//    printf("%d ",v[i]);
//  printf("\n");

  sum=0;
  for(i=0;i<n;i++){
    s=0;
    j=i;
    while(j<n&&s<=u){
      if(v[j]==-1||i>v[j])
        s++;
      if(s>=l && s<=u)
        sum++;
      j++;
    }
  }
  fout=fopen("secv5.out","w");
  fprintf(fout,"%lld\n",sum);
  fclose(fout);
  return 0;
}