Pagini recente » Cod sursa (job #199859) | Cod sursa (job #86520) | Cod sursa (job #1982889) | Cod sursa (job #750167) | Cod sursa (job #991264)
Cod sursa(job #991264)
//varianta I 100p cu cautare binara O(n^2*log(n))
#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)//returneaza pozitia primului element
{ //mai mare ca 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);
nrsol+=p-j-1;//p-j-1 este numarul de solutii
} //pentru perechea a[i] si a[j]
g<<nrsol<<'\n';
g.close();
return 0;
}
/*
//varianta II 70p nu se incadreaza in timp O(n^3)
#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;
}*/