Cod sursa(job #2020145)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 9 septembrie 2017 14:41:29
Problema Loto Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;
struct SABATON{
int S,a,b,c;
SABATON(int s,int x,int y,int z)
{
	S = s;
	a = x;
	b = y;
	c = z;
}
};
bool cmp(SABATON x,SABATON y)
{
	return x.S < y.S;
}
vector<SABATON>c;
vector<int>v;
vector<int>sol;
int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    int n , s , x ;
    vector<int>::iterator it1,it2,it3,it4;
    vector<SABATON>::iterator i1,i2;
    scanf("%d%d",&n,&s);
    for(int i = 1 ; i <= n ; i++)
    {
        scanf("%d",&x);
        v.push_back(x);
    }
    sort(v.begin(),v.end());
	for(it1 = v.begin(); it1 != v.end()-2 ; it1++){
		for(it2 = it1; it2 != v.end()-1 ; it2++){
			for(it3 = it2; it3 != v.end() ; it3++){
				SABATON temp((*it1)+(*it2)+(*it3),(*it1),(*it2),(*it3));
				c.push_back(temp);
			}
		}
	}
	sort(c.begin(),c.end(),cmp);
	bool ok1 = false;
  for(i1 = c.begin() ; i1 != c.end(); i1++)
  {
    int dif = s - (i1)->S;
    if(dif <= 0)
      continue;
    SABATON ddd(dif,0,0,0);
    bool ok = binary_search(c.begin(),c.end(),ddd,cmp);
    if(ok == true)
    {
      ok1 = true;
      i2 = upper_bound(c.begin(),c.end(),ddd,cmp);
      i2--;
      sol.push_back(i1->a);
      sol.push_back(i1->b);
      sol.push_back(i1->c);
      sol.push_back(i2->a);
      sol.push_back(i2->b);
      sol.push_back(i2->c);
      break;
    }
  }
  if(ok1 == false)
    printf("-1");
  else
    for(it1 = sol.begin() ; it1 != sol.end() ; it1++)
      printf("%d ",(*it1));
    return 0;
}