Pagini recente » Cod sursa (job #562455) | Cod sursa (job #2767319) | Cod sursa (job #1855422) | Cod sursa (job #2913441) | Cod sursa (job #3130410)
#include<iostream>
#include<vector>
#include<fstream>
#include<algorithm>
using namespace std;
struct Combinari{
long long suma;
int nr1, nr2, nr3;
bool operator<(const Combinari& obj) const {
return suma < obj.suma;}
};
void citire(int& n, long long& s, vector<int>& numere){
ifstream fin("loto.in");
fin>>n;
fin>>s;
numere.resize(n);
for( int i=0; i<n; i++)
fin>>numere[i];
fin.close();
}
void afisare(const vector<int>& combinari){
ofstream fout("loto.out");
if (combinari.empty())
fout<<"-1\n";
else{
for(int i = 0; i< 6; i++)
fout<<combinari[i]<<" ";
fout<<"\n";
}
fout.close();
}
//generare bilet castigator
vector<int> generareBilet(const vector<int>& numere, int sumaCeruta){
vector<Combinari> combinari;
int n= numere.size();
//generarea tuturor combinarilor posibile de 3 numere
for( int i = 0; i < n; i++){
for( int j = i; j < n; j++){
for(int t = j; t < n; t++){
long long suma = numere[i]+ numere[j]+numere[t];
combinari.push_back({ suma, i, j, t });
}
}
}
sort(combinari.begin(),combinari.end());
//cautam o combinare care ajunge la suma ceruta
for( int i = 0; i < n; i++){
for( int j = i; j < n; j++){
for(int t = j; t < n; t++){
long long sumaRamasa = sumaCeruta - numere[i] - numere[j] - numere[t];
Combinari combinareCeruta = { sumaRamasa, -1, -1, -1 };
auto it = lower_bound(combinari.begin(), combinari.end(), combinareCeruta);
if (it != combinari.end() && it->suma == sumaRamasa) {
return { numere[i], numere[j], numere[t], numere[it->nr1], numere[it->nr2], numere[it->nr3] };}
}
}
}
return{};
}
int main() {
int n;
long long s;
vector<int> numere;
citire(n, s, numere);
vector<int> bilet = generareBilet(numere, s);
afisare(bilet);
return 0;
}