Pagini recente » Cod sursa (job #1899697) | Cod sursa (job #1867390) | Cod sursa (job #1479366) | Cod sursa (job #708420) | Cod sursa (job #2065646)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("nrtri.in");
ofstream out("nrtri.out");
const int NMAX = 800;
int v[NMAX+1];
int CB(int low,int high,int x)
{
int pw2=1;
while(pw2<high-low+1)
{
pw2=pw2*2;
}
pw2=pw2/2;
int sol = low;
for(; pw2>=1; pw2=pw2/2)
{
if(sol+pw2<=high && v[sol+pw2]<=x)
sol+=pw2;
}
if(sol==low && v[sol]>x)
return -1;
else
return sol;
}
int Solve(int n)
{
int sol=0;
for(int i=1; i<=n-2; i++)
{
for(int j=i+1;j<=n-1;j++)
{
int k=CB(j+1,n,v[i]+v[j]);
if(k!=-1)
sol+=k-j;
}
}
return sol;
}
int main()
{
int n;
in>>n;
for(int i=1; i<=n; i++)
{
in>>v[i];
}
sort(v,v+n);
out<<Solve(n);
}