Pagini recente » Cod sursa (job #2210684) | Cod sursa (job #1341219) | Cod sursa (job #504955) | Cod sursa (job #985719) | Cod sursa (job #1008703)
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
std::vector<int>_vNumbers,_vTickets;
struct TSuma
{
int iSuma,iIndex1,iIndex2,iIndex3;
TSuma(int iNewSuma, int iNewIndex1, int iNewIndex2,int iNewIndex3)
{
iSuma=iNewSuma;
iIndex1=iNewIndex1; iIndex2=iNewIndex2;
iIndex3=iNewIndex3;
}
bool operator<(const TSuma& another) const
{
return iSuma<another.iSuma;
}
bool operator==(const TSuma& another) const
{
return iSuma==another.iSuma;
}
};
set <TSuma> _vSumTriplets;
//----------------------------------------------------
void PrintSumTriplets()
{
std::set<TSuma>::iterator it;
it=_vSumTriplets.begin();
while (it!=_vSumTriplets.end())
{
TSuma el=*it;
printf("%d %d %d %d \n",el.iSuma,el.iIndex1,el.iIndex2,el.iIndex3);
it++;
}
}
//----------------------------------------------------
void citire(int *iSuma)
{
FILE * fin = fopen("loto.in","r");
int iN;
fscanf(fin,"%d %d",&iN,iSuma);
int iNumber;
for (int i=0; i<iN; i++)
{
fscanf(fin,"%d",&iNumber);
if (iNumber < *iSuma)
_vNumbers.push_back(iNumber);
}
fclose(fin);
}
//----------------------------------------------------
int main()
{
int iSuma;
citire(&iSuma);
_vTickets=_vNumbers;
/*
sort(_vNumbers.begin(),_vNumbers.end());
for (int i=0; i<_vNumbers.size(); i++)
{
while ((i<_vNumbers.size())&&(_vNumbers[i]==_vNumbers[i+1])) i++;
_vTickets.push_back(_vNumbers[i]);
}
*/
int i,j,q,iS,iS2,iS3;
for (i=0; i<_vTickets.size(); i++)
for (j=0; j<_vTickets.size(); j++)
{
iS2=_vTickets[i]+_vTickets[j];
if (iS2<iSuma)
//break;
for (q=0; q<_vTickets.size(); q++)
{
iS=iS2+_vTickets[q];
if (iS<iSuma)
{
TSuma NewElement=TSuma(iS,i,j,q);
_vSumTriplets.insert(NewElement);
}
}
}
FILE * fout = fopen("loto.out","w");
// PrintSumTriplets();
int iDiff;
for (i=0; i<_vTickets.size(); i++)
for (j=0; j<_vTickets.size(); j++)
for (q=0; q<_vTickets.size(); q++)
{
iS=_vTickets[i]+_vTickets[j]+_vTickets[q];
iDiff=iSuma-iS;
TSuma elElement=TSuma(iDiff,1,1,1);
std::set<TSuma>::iterator it;
it = _vSumTriplets.find(elElement);
if (it!=_vSumTriplets.end())
{
elElement=*it;
fprintf(fout,"%d %d %d %d %d %d",_vTickets[i],_vTickets[j],_vTickets[q],
_vTickets[elElement.iIndex1],_vTickets[elElement.iIndex2],_vTickets[elElement.iIndex3]);
fclose(fout);
return 0;
}
}
fprintf(fout,"-1");
fclose(fout);
return 0;
}