Pagini recente » Cod sursa (job #1528475) | Cod sursa (job #711683) | Cod sursa (job #1013153) | Cod sursa (job #56754) | Cod sursa (job #358185)
Cod sursa(job #358185)
#include <stdlib.h>
#include <stdio.h>
#define N 810
int sir[N];
int comp(const void *a,const void *b)
{return (*(int*)a- *(int*)b);
}
int main()
{FILE *fin,*fout;
int i,j,l,k,n,sum,dif,s,y,st,dr,mid;
fin=fopen("nrtri.in","r");
fout=fopen("nrtri.out","w");
if(!(fin&&fout))
return 0;
printf("\n");
fscanf(fin,"%d",&n);
for (i=0;i<n;i++)
{fscanf(fin,"%d",&sir[i]);
}
qsort(sir,n,sizeof(int),comp);
for (i=0,s=0;i<n;i++)
{for (j=i+1;j<n;j++)
{y=0;
sum=sir[i]+sir[j];
dif=abs(sir[i]-sir[j]);
st=0;dr=n-1;
while(st<dr)
{mid=st+(dr-st)/2;
if(sir[mid]<dif)
{st=mid+1;
}
else
{dr=mid;
}
}
while(st>0&&sir[st-1]==sir[st])
{st--;
}
l=st;
///
st=0;dr=n-1;
while(st<dr)
{mid=st+(dr-st+1)/2;
if(sir[mid]>sum)
{dr=mid-1;
}
else
{st=mid;
}
}
while(dr<n-1&&sir[dr+1]==sir[dr])
{dr++;
}
k=dr;
//////
// for (l=0;l<n&&dif>sir[l];l++)
// {}
// for (k=n-1;k>=0&&sum<sir[k];k--){}
if(l<=i&&i<=k)y--;
if(l<=j&&j<=k)y--;
y+=k-l+1;
printf("%d %d %d %d %d\n",i,j,l,k,y);
s+=y;
}
}
printf("%d\n",s/3);
fclose(fout);
return 0;
}