Pagini recente » Cod sursa (job #447973) | Cod sursa (job #2481322) | Cod sursa (job #2336810) | Cod sursa (job #2952119) | Cod sursa (job #1927919)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("nrtri.in"); ofstream g("nrtri.out");
int n,a[10001],j,i,nr;
int cautbin(int x) {
int st = 1,dr = n,mij,last = 0;
while (st <= dr)
{
while(st == i || st == j) ++st;
while(dr == i || dr == j) --dr;
mij = (st + dr) / 2;
if (a[mij] <= x){
if (mij==i || mij == j) {
while(mij == i || mij == j) ++mij;
if (a[mij] <= x) {
last = mij;
break;
}
else {
--mij;
dr=mij;
}
}
else {
if (a[i] + a[mij] > a[j] && a[j] + a[mij] > a[i]) {
last = mij;
break;
}
else st = mij + 1;
}
}
if (a[mij] > x) {
dr = mij - 1;
}
}
return last;
}
int main() {
f>>n;
for(i = 1; i <= n; ++i) {
f>>a[i];
}
sort(a+1,a+n+1);
nr = 0;
for(i = 1; i < n; ++i) {
for (j = n; j > i ; --j) {
if(cautbin(a[i] + a[j]) > 0) {
++nr;
}
}
}
g<<nr/2;
return 0;
}