Pagini recente » Cod sursa (job #2150843) | Cod sursa (job #247751) | Cod sursa (job #1186244) | Cod sursa (job #2015834) | Cod sursa (job #2003002)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("nrtri.in");
ofstream out("nrtri.out");
int val[801];
int n;
int pozInser;
void citire(){
in >> n;
for(int i = 1; i <= n; i++)
in >> val[i];
}
void QuickSort(int st, int dr){
int i = st, j = dr;
int pivot = (st + dr) / 2;
while(i <= j){
while(val[i] < val[pivot] && i < dr)i++;
while(val[j] > val[pivot] && j > st)j--;
if(i <= j ){
int aux = val[i];
val[i] = val[j];
val[j] = aux;
i++;
j--;
}
}
if(i < dr)
QuickSort(i, dr);
if(j > st)
QuickSort(st, j);
}
bool verificare(int i, int j,int mij){
if(mij != i && mij != j)
return true;
return false;
}
int cautareBinara(int st, int dr, int caut, int i, int j){
if(st > dr)
return -1;
else{
int mij = (st + dr) / 2;
if(val[mij] <= caut && (val[mij + 1] > caut || mij == n))
return mij;
else if(val[mij] <= caut && val[mij + 1] <= caut)
st = mij + 1;
else
dr = mij - 1;
cautareBinara(st, dr, caut, i , j);
}
}
int main(){
int nr = 0;
citire();
QuickSort(1, n);
for(int i = 1; i < n ; i++)
for(int j = i + 1; j <= n; j++){
int sum = val[i] + val[j];
int poz = cautareBinara(1,n, sum, i, j);
if(poz != -1){
if(verificare(i, j, poz) == true){
//out << val[i] << ' '<< val[j] << ' '<< val[poz]<<'\n';
nr ++;
}
}
}
out << nr;
return 0;
}