Cod sursa(job #1384663)

Utilizator hrazvanHarsan Razvan hrazvan Data 11 martie 2015 12:05:18
Problema Patrate 3 Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>
#define MAXN 1000
#define PREC 10000
#define MOD 9991
int x[MAXN], y[MAXN], hashx[MAXN], hashy[MAXN], next[MAXN], ult[MOD], dr = 0;

inline void add(int x, int y){
  int hv = (x + y) % MOD;
  hashx[dr] = x;
  hashy[dr] = y;
  next[dr] = ult[hv];
  ult[hv] = dr;
  dr++;
}

inline char bun(int x, int y){
  int hv = (x + y) % MOD, poz;
  poz = ult[hv];
  while(poz > -1 && !(hashx[poz] == x && hashy[poz] == y))
    poz = next[poz];
  if(poz != -1)
    return 1;
  return 0;
}

inline int getnum(FILE *in){
  char ch;
  int rez = 0, minus;
  minus = 1;
  ch = fgetc(in);
  if(ch == '-'){
    minus = -1;
    ch = fgetc(in);
  }
  while(ch >= '0' && ch <= '9'){
    rez *= 10;
    rez += ch - '0';
    ch = fgetc(in);
  }
  ch = fgetc(in);
  while(ch >= '0' && ch <= '9'){
    rez *= 10;
    rez += ch - '0';
    ch = fgetc(in);
  }
  return rez * minus;
}

int main(){
  FILE *in = fopen("patrate3.in", "r");
  int n, i, j;
  for(i = 0; i < MOD; i++)
    ult[i] = -1;
  fscanf(in, "%d ", &n);
  for(i = 0; i < n; i++){
    x[i] = getnum(in);
    y[i] = getnum(in);
    add(x[i], y[i]);
  }
  fclose(in);
  int rez = 0;
  for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
      if(y[j] > y[i] && x[j] >= x[i]){
        if(bun(x[j] + (y[j] - y[i]), y[j] - (x[j] - x[i])) && bun(x[i] + (y[j] - y[i]), y[i] - (x[j] - x[i])))
          rez++;
      }
    }
  }
  FILE *out = fopen("patrate3.out", "w");
  fprintf(out, "%d", rez);
  fclose(out);
  return 0;
}