Pagini recente » Cod sursa (job #2577000) | Cod sursa (job #1480182) | Cod sursa (job #3231004) | Cod sursa (job #3249304) | Cod sursa (job #2211782)
#include <iostream> //Binary search task
#include <fstream>
#include <algorithm>
#include <set>
#define pb push_back
using namespace std;
ifstream in("nrtri.in");
ofstream out("nrtri.out");
int a[810], s;
int i, j, n, l, r, m, c; //l - left; r - right; m - middle; c - count; s - sum of a[i] and a[j]
set < vector < int > > used;
vector < int > sum;
//4
//2 3 4 7
int main(){
in >> n;
for(i = 1; i <= n; i++)
in >> a[i];
sort(a, a + n + 1);
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++){
if(i != j){
l = 1;
r = n;
m = l + (l + r) / 2;
s = a[i] + a[j];
while(l <= r){
if(a[m] > s){
r = m - 1;
m = (l + r) / 2;
}
else if(a[m] <= s){
if(m != i && m != j && a[i] + a[m] >= a[j] && a[j] + a[m] >= a[i]){
sum.pb(a[i]);
sum.pb(a[j]);
sum.pb(a[m]);
sort(sum.begin(), sum.end());
if(used.count(sum) == 0){
used.insert(sum);
//cout << a[i] << " " << a[j] << " " << a[m] << "\n\n";
c++;
}
sum.clear();
}
l = m + 1;
m = (l + r) / 2;
}
}
}
}
out << c;
return 0;
}