Cod sursa(job #991260)

Utilizator danutbodbodnariuc danut danutbod Data 30 august 2013 10:24:09
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
//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;
}*/