Cod sursa(job #3124771)

Utilizator daristyleBejan Darius-Ramon daristyle Data 30 aprilie 2023 00:27:26
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
//sursa harsan razvan
#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;
}