Pagini recente » Cod sursa (job #2319108) | Cod sursa (job #2659975) | Cod sursa (job #2571150) | Cod sursa (job #2544823) | Cod sursa (job #586762)
Cod sursa(job #586762)
#include<stdio.h>
#include<algorithm>
using namespace std;
int A[1000];
int N;
int a;
int b;
unsigned long long MAX;
int caut(int nr,int li,int ls)
{
if(li<=ls)
{
if(A[(li+ls)/2] == nr)
{
int i;
for(i=(li+ls)/2;A[i] == A[i+1];i++);
return i;
}
else if(A[(li+ls)/2] > nr)
return caut(nr,li,(li+ls)/2-1);
else
return caut(nr,(li+ls)/2+1,ls);
}
return ls;
}
int caut2(int nr,int li,int ls)
{
if(li<=ls)
{
if(A[(li+ls)/2] == nr)
{
int i;
for(i=(li+ls)/2;A[i] == A[i+1];i++);
return i;
}
else if(A[(li+ls)/2] > nr)
return caut2(nr,li,(li+ls)/2-1);
else
return caut2(nr,(li+ls)/2+1,ls);
}
return li;
}
int main()
{
FILE *f = fopen("nrtri.in","r");
FILE *g = fopen("nrtri.out","w");
fscanf(f,"%d",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d",&A[i]);
sort(A+1,A+N+1);
for(int i=1;i<=N;i++)
for(int j=i+1;j<=N;j++)
{
a = caut(A[i]+A[j],1,N);
b = caut2(A[j]-A[i],1,N);
if(a<=j)
b = a+1;
if(b<=j)
b = j+1;
if(b<=a)
MAX += a-b+1;
}
fprintf(g,"%llu",MAX);
fclose(g);
fclose(f);
return 0;
}