Pagini recente » Cod sursa (job #61039) | Cod sursa (job #1612923) | Cod sursa (job #2810301) | Cod sursa (job #2689893) | Cod sursa (job #2780637)
#include<bits/stdc++.h>
using namespace std;
int n,a,s,V[105];
ifstream fin("loto.in");
ofstream fout("loto.out");
typedef struct tip
{
int suma;
int x1;
int x2;
int x3;
};
tip M[1000005]; //Aici trebuie sa declaram M-ul de tipul tip (noul tip definit de noi)
bool cmp(tip a, tip b) //Cand declaram un tip nou, compilatorul nu stie dupa ce sa compare 2 valori de acel tip, asa ca trebuie sa ii specificam noi asta
{ //Facem acest lucru printr-o functie booleana (care returneaza 0 sau 1)
//Sa zicem ca vrem sa sortam crescator dupa suma
if(a.suma<b.suma) return 1; //Daca a.suma<b.suma, atunci ordinea lor este ok (cel cu suma cea mai mica este primul), asa ca returnam 1 (adica true)
else return 0; //Altfel, returnam 0 adica false
}
int main()
{
fin>>n>>s;
a = 0;
for(int i = 1;i<=n;i++)
{
fin>>V[i];
}
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
for(int k = 1;k<=n;k++)
{
a++;
M[a].suma = V[i] + V[j] + V[k]; //Sa nu uiti sa pui M[a].suma, nu doar M[a] (M[a] este de tipul tip, in timp ce M[a].suma este o componenta de a sa de tip intreg
M[a].x1 = V[i];
M[a].x2 = V[j];
M[a].x3 = V[k];
}
}
}
sort(M+1,M+a+1,cmp); //Functia de comparare o vom specifica aici, la finalul instructiunii sort
//Practic, compilatorul nostru in loc sa ia 2 elemente a si b si sa verifice daca a<b folosind operatorul "<" din c++ (care nu prea stie ce sa compare)
//El calculeaza daca cmp(a,b) este 1 (caz in care e ok) si 0 (caz in care nu e ok)
for(int i = 1;i<=a;i++)
{
int st = 1;
int dr = a;
while(st<=dr)
{
int mid = (st+dr)/2;
if(s - M[i].suma == M[mid].suma) //La fel si aici
{
fout<<M[i].x1<<' '<<M[i].x2<<' '<<M[i].x3<<' '<<M[mid].x1<<' '<<M[mid].x2<<' '<<M[mid].x3;
i = a+1;
break;
}
else{
if(s - M[i].suma < M[mid].suma)
{
dr = mid-1;
}
else st = mid + 1;
}
}
}
}