Cod sursa(job #2038593)

Utilizator vladm98Munteanu Vlad vladm98 Data 13 octombrie 2017 20:32:38
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

int v[101];
struct cheieuri 
{
	int suma;
	vector <int> v;
};
vector <cheieuri> cheie[1000001];
const int MOD = 1000000;
ofstream fout ("loto.out");

void baga (int sum, int sum_mod, int i, int j, int k)
{
	bool ok = true;
	for (auto x:cheie[sum_mod])
		if (x.suma == sum)
			ok = false;
	if (ok == false)
		return ;
	cheieuri nou;
	nou.suma = sum;
	nou.v.push_back(i);
	nou.v.push_back(j);
	nou.v.push_back(k);
	cheie[sum_mod].push_back(nou);
}
bool cauta (int dif, int dif_mod)
{
	for (auto x:cheie[dif_mod])
		if (x.suma == dif)
		{
			for (auto y:x.v)
				fout << v[y] << ' ';
			return true;
		}
	return false;
}
int main(int argc, char const *argv[])
{
	ifstream fin ("loto.in");
	int n, s;
	fin >> n >> s;
	for (int i = 1; i<=n; ++i)
		fin >> v[i];
	for (int i = 1; i<=n; ++i)
		for (int j = i; j<=n; ++j)
			for (int k = j; k<=n; ++k)
			{
				int sum = v[i]+v[j]+v[k];
				int sum_mod = sum%MOD;
				int dif_mod = (s - sum)%MOD;
				baga (sum, sum_mod, i, j, k);
				if (cauta (s - sum, dif_mod) == true)
				{
					fout << v[i] << ' ' << v[j] << ' ' << v[k];
					return 0;
				}
			}
	fout << "-1";
	return 0;
}