Pagini recente » Cod sursa (job #788306) | Cod sursa (job #910656) | Cod sursa (job #2842159) | Cod sursa (job #2420637) | Cod sursa (job #62666)
Cod sursa(job #62666)
#include<fstream.h>
#include<math.h>
int n,i,j,v[801];
int cauta()
{
int st,dr;
st=1;
dr=n;
while(st<dr)
{
if(v[(st+dr)/2]>=abs(v[i]-v[j])&&v[(st+dr)/2]<=v[i]+v[j])
return (st+dr)/2;
if(v[(st+dr)/2]<=abs(v[i]-v[j]))st=(st+dr)/2+1;
else dr=(st+dr)/2-1;
}
return 0;
}
int main()
{
int cnt=0,x;
ifstream in("nrtri.in");
in>>n;
for(i=1;i<=n;i++)
in>>v[i];
in.close();
int aux;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(v[i]>v[j])
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
x=cauta();
if(x!=0)
{
for(int tz=x;tz<=n;tz++)
{
if(v[i]+v[j]<v[tz])
break;
if(i==tz||j==tz)
cnt--;
//if(i!=tz&&j!=tz)cnt++//cout<<"SUS : "<<v[i]<<" "<<v[j]<<" "<<v[tz]<<endl;
}
cnt+=tz-x;
for(tz=x-1;tz>0;tz--)
{
if(abs(v[i]-v[j])>v[tz])
break;
if(i==tz||j==tz)
cnt--;
//if(i!=tz&&j!=tz)cnt++//cout<<"JOS : "<<v[i]<<" "<<v[j]<<" "<<v[tz]<<endl;
}
cnt+=x-tz-1;
}
}
//cout<<"-------------------------------------------------"<<endl;
ofstream out("nrtri.out");
out<<cnt/3;
out.close();
return 0;
}