Pagini recente » Cod sursa (job #56608) | Cod sursa (job #2701055) | Cod sursa (job #2253682) | Cod sursa (job #2689193) | Cod sursa (job #629654)
Cod sursa(job #629654)
#include<stdio.h>
#include<algorithm>
using namespace std;
int i,n,poz,sum,j,k,nr;
typedef struct{
int x;
int y;
}nrtri;
nrtri a[801];
inline bool cmp (const nrtri &a, const nrtri &b)
{
if (a.x==b.x) return a.y>b.y;
else return a.x<b.x;
}
inline void cb(int x,int xx){
int st,dr,mij;
st=xx+1;
dr=n;
mij=(st+dr)/2;
while (st<=dr){
if (a[mij].x>x){
dr=mij-1;
mij=(st+dr)/2;
}
if (a[mij].x==x){
poz=mij;
break;
}
if (a[mij].x<x){
poz=mij;
st+=2;
mij=(st+dr)/2;
}
}
}
int main(){
freopen("nrtri.in","r",stdin);
freopen("nrtri.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; ++i)
{
scanf("%d",&a[i].x);
a[i].y=i;
}
sort(a+1,a+n+1,cmp);
for (i=1; i<=n-2; ++i)
{
for (j=i+1; j<=n-1; ++j)
{
sum=a[i].x+a[j].x;
cb(sum,j);
for (k=j+1; k<=poz; k++)
if (a[i].x+a[j].x>=a[k].x && a[i].x+a[k].x>=a[j].x && a[k].x+a[j].x>=a[i].x)
{
nr++;
//printf("%d %d %d\n",a[i].y,a[j].y,a[k].y);
}
}
}
printf("%d\n",nr);
return(0);
}