Cod sursa(job #1761336)

Utilizator andrei110901Diaconu Andrei andrei110901 Data 22 septembrie 2016 08:36:20
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define MOD 789231
using namespace std;

int h[1025], next[1025], f[1025], liste[MOD], v[1025], a;

inline int search(int x){
  int j;
  for(j=liste[x%MOD];j!=0;j=next[j])
    if(h[j]==x)
      return j;
  return 0;
}

inline void add(int x){
  int poz=search(x);
  if(h[poz]==x)
    f[poz]++;
  else{
    h[a]=x;
    f[a]=1;
    next[poz]=liste[x%MOD];
    liste[x%MOD]=a;
    a++;
  }
}

int main()
{
  int l, c, i, j;
  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;
  add(v[0]+v[1]);
  S=0;
  for(i=2;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++){
      add(v[i]+v[j]);
    }
  }
  fprintf(fo, "%lld", S);
  fclose(fi);
  fclose(fo);
  return 0;
}