Pagini recente » Cod sursa (job #892933) | Cod sursa (job #1759600) | Cod sursa (job #416563) | Cod sursa (job #1616736) | Cod sursa (job #62670)
Cod sursa(job #62670)
#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,tzi;
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(tzi=x;tzi<=n;tzi++)
{
if(v[i]+v[j]<v[tzi])
break;
if(i==tzi||j==tzi)
cnt--;
}
cnt+=tzi-x;
for(tzi=x-1;tzi>0;tzi--)
{
if(abs(v[i]-v[j])>v[tzi])
break;
if(i==tzi||j==tzi)
cnt--;
}
cnt+=x-tzi-1;
}
}
ofstream out("nrtri.out");
out<<cnt/3<<'\n';
out.close();
return 0;
}