Pagini recente » Cod sursa (job #1738210) | Monitorul de evaluare | Cod sursa (job #1833764) | Monitorul de evaluare | Cod sursa (job #414967)
Cod sursa(job #414967)
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
FILE*f=fopen("nrtri.in","r");
FILE*g=fopen("nrtri.out","w");
int n,v[801],i,j,u,p,m,s,nr,dif,aux;
//int w[801];
int main () {
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
sort(v+1,v+n+1);
for(i=1;i<n;i++){
for(j=i+1;j<=n;j++){
s=v[i]+v[j];
dif=v[j]-v[i];
//cautam valorile din sir situate intre s si dif
//cautam cea mai mica pozitie pe care se afla un element >=dif
p=1; u=n;
while(p<=u){
m=u-(u-p)/2;
if(v[m]>=dif)
u=m-1;
else
p=m+1;
}
//valoarea cautata ramane in p
aux=p;
// if(aux==i||aux==j)
// aux++;
//cautam cea mai mare pozitie pe care se afla un element <=s
p=1; u=n;
while(p<=u){
m=u-(u-p)/2;
if(v[m]<=s)
p=m+1;
else
u=m-1;
}
//if(u==j)
// u++;
//valoarea cautata ramane in u
nr=nr+u-aux+1;
if(j>=aux&&j<=u)
nr--;
if(i>=aux&&i<=u)
nr--;
}
}
nr=nr/3;
fprintf(g,"%d",nr);
fclose(f);
fclose(g);
return 0;
}