Cod sursa(job #1761422)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 22 septembrie 2016 10:28:49
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define MOD 10011
using namespace std;

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

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;
}