Cod sursa(job #2798724)

Utilizator Madalin_IonutFocsa Ionut-Madalin Madalin_Ionut Data 11 noiembrie 2021 19:32:04
Problema Oite Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("oite.in");
ofstream fout("oite.out");

struct pereche
{
	int a, b;
};

unordered_map<int, pereche> M;
int n, s, a[1026], fr[1025];

int Diferite(int x, int i, int j)
{
	if (M[x].a != i && M[x].a != j && M[x].b != j && M[x].b != i) 
		return 1;
	return 0;
}

int Noi(int x, int i, int j)
{
	if (fr[M[x].a] == 0 || fr[M[x].b] == 0 || fr[i] == 0 || fr[j] == 0) 
		return 1;
	return 0;
}

int main()
{
	int i, j, x, cnt = 0, y;
	fin >> n >> s;
	for (i = 1; i <= n; i++)
		fin >> a[i];
	for (i = 1; i <= n; i++)
		for (j = i + 1; j <= n; j++)
			M[a[i] + a[j]] = { i, j };
	for(i = 1;i <= n;i++)
		for (j = i + 1; j <= n; j++)
		{
			x = s - a[i] - a[j];
			if (x > 0 && M.count(x) > 0)
			{
				if (Diferite(x, i, j) && Noi(x, i, j))
				{
					fr[i] = fr[j] = fr[M[x].a] = fr[M[x].b] = 1;
					cnt++;
				}
			}
		}
	fout << cnt;
	fout.close();
}