Pagini recente » Cod sursa (job #1275100) | Cod sursa (job #616775) | Cod sursa (job #3128935) | Cod sursa (job #1888647) | Cod sursa (job #2510087)
#include <stdio.h>
#include <algorithm>
#define NMAX 800
using namespace std;
int n,v[NMAX+3];
FILE *fin,*fout;
int c_binar(int l1,int l2,int &tr)
{
int st=l2+1;
int dr=n;
int rez=0;
while(st<=dr)
{
int mij=(st+dr)/2;
if(v[l1]+v[l2]>=v[mij])
{
//caut in stanga
rez=mij;
dr=mij-1;
}
else
{
st=mij+1;
}
}
//fprintf(fout,"%d\n",rez);
if(rez>0)
{
tr+=rez-l2;
rez=1;
}
return rez;
}
void afis()
{
for(int i=1; i<=n; i++)
{
fprintf(fout,"%d ",v[i]);
}
fprintf(fout,"\n");
}
int main()
{
fin=fopen("nrtri.in","r");
fout=fopen("nrtri.out","w");
fscanf(fin,"%d",&n);
for(int i=1; i<=n; i++)
{
fscanf(fin,"%d",&v[i]);
}
sort(v+1,v+n+1);
//afis();
int triunghiuri=0;
for(int i=1; i<=n-2; i++)
{
int ok=0;
if(v[i]+v[i+1]<v[i+2])
{
break;
}
for(int j=i+1; j<=n-1; j++)
{
ok=c_binar(i,j,triunghiuri);
//fprintf(fout,"%d %d %d\n",ok,i,j);
if(ok==0)
{
break;
}
}
}
fprintf(fout,"%d",triunghiuri);
return 0;
}