Cod sursa(job #332197)

Utilizator DranaXumAlexandru Dumitru Paunoiu DranaXum Data 16 iulie 2009 23:22:50
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<vector>
#include<algorithm>

using namespace std;

ifstream fin("nrtri.in");
ofstream fout("nrtri.out");

int poz[30001];
int cnt[30001];
vector<int> nrs;

int main()
{
    int sol=0,n,i,j,x;
    fin>>n;
    for(i=0;i<n;i++) {fin>>x; nrs.push_back(x);}

    make_heap(nrs.begin(),nrs.end());
    sort_heap(nrs.begin(),nrs.end());


    for(i=0;i<n;i++) {poz[nrs[i]]=i+1;}
    for(i=1;i<=30000;i++)
    {    if(poz[i])
            cnt[i]=cnt[i-1]+1;
        else cnt[i]=cnt[i-1];
    }

   /* for(i=0;i<n;i++){fout<<nrs[i]<<" ";
       for(j=i+1;j<n;j++)
        {
            int pozi=poz[nrs[i]+nrs[j]];
            if(!pozi)
            {
                sol+=cnt[nrs[i]+nrs[j]]-cnt[nrs[j]];
                if(nrs[j]==nrs[j-1]) sol++;
            }
            else{
                sol+=pozi-j-1;
            }
        }}*/

    int sol2=0;
    for(i=0;i<n;i++){
       for(j=i+1;j<n;j++)
        {
            if(nrs[j]!=nrs[j-1])
            for(int k=nrs[j];k<=nrs[i]+nrs[j];k++)
            {
                if(poz[k]) sol2++;
            }
        }}
   // fout<<sol<<"\n";
    fout<<sol2;
    fin.close();
    fout.close();
    return 0;
}