Cod sursa(job #1764998)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 26 septembrie 2016 10:21:39
Problema Oite Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia1-hashuri.rabinkarp Marime 0.86 kb
#include <stdio.h>
#define MOD 10011
using namespace std;
 
int h[1024*1024+1], next[1024*1024+1], f[1024*1024+1], liste[MOD], v[1024*1024+1];
 
inline int search(int x){
  int j;
  if(x==0)
    return 0;
  for(j=liste[x%MOD];j!=0 && h[j]!=x;j=next[j]);
  return j;
}
 
int main()
{
  int l, c, a, i, j, x, poz;
  long long S;
  FILE *fi=fopen("oite.in", "r"), *fo=fopen("oite.out", "w");
  fscanf(fi, "%d%d", &c, &l);
  for(i=0;i<c;i++)
    fscanf(fi, "%d", &v[i]);
  a=1;
  S=0;
  for(i=1;i<c-1;i++){
    for(j=i+1;j<c;j++)
      if(l-v[i]-v[j]>=0)
        S+=f[search(l-v[i]-v[j])];
    for(j=0;j<i;j++){
      x=v[i]+v[j];
      poz=search(x);
      if(h[poz]==x)
        f[poz]++;
      else{
        h[a]=x;
        next[a]=liste[x%MOD];
        liste[x%MOD]=a;
        f[a]=1;
        a++;
      }
    }
  }
  fprintf(fo, "%lld", S);
  fclose(fi);
  fclose(fo);
  return 0;
}