Pagini recente » Cod sursa (job #1039659) | Cod sursa (job #984447) | Cod sursa (job #723581) | Cod sursa (job #248984) | Cod sursa (job #629655)
Cod sursa(job #629655)
#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;
dr=n;
mij=(st+dr)/2;
while (st<=dr){
if (a[mij].x<x)
{
poz=mij;
st+=1;
mij=(st+dr)/2;
}
if (a[mij].x>x)
{
dr=mij-1;
mij=(st+dr)/2;
}
if (a[mij].x==x)
{
poz=mij;
break;
}
}
}
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+1);
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);
}