Pagini recente » Cod sursa (job #1674337) | Cod sursa (job #1067261) | Cod sursa (job #2042252) | Cod sursa (job #1697436) | Cod sursa (job #991260)
Cod sursa(job #991260)
//varianta I 100p cu cautare binara
#include <fstream>
#include<algorithm>
using namespace std;
ifstream f("nrtri.in");
ofstream g("nrtri.out");
int i,j,k,n,t,nrsol,s,p,a[1000];
int cauta_bin(int x)
{
int st,dr,mij;
st=1;dr=n;
while(st<dr){
mij=(st+dr)/2;
if(a[mij]<=x)st=mij+1;
else dr=mij-1;
}
if(x>=a[st])return st+1;
else return st;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)f>>a[i];
sort(a+1,a+n+1);
for(i=1;i<=n-2;i++)
for(j=i+1;j<=n-1;j++){
s=a[i]+a[j];
p=cauta_bin(s);
// g<<i<<" "<<j<<" "<<p<<" "<<p-j-1<<endl;
if(a[p]==s)p++;
nrsol+=p-j-1;
}
g<<nrsol<<'\n';
g.close();
return 0;
}
/*
//varianta II 70p nu se incadreaza in timp
#include <fstream>
using namespace std;
ifstream f("nrtri.in");
ofstream g("nrtri.out");
int i,j,k,n,t,a[1000];
int main()
{
f>>n;
for(i=1;i<=n;i++)f>>a[i];
for(i=1;i<=n-2;i++)
for(j=i+1;j<=n-1;j++)
for(k=j+1;k<=n;k++)
if(a[i]+a[j]>=a[k]&&a[i]+a[k]>=a[j]&&a[k]+a[j]>=a[i])t++;
g<<t<<'\n';
g.close();
return 0;
}*/