Cod sursa(job #244085)

Utilizator ViksenVictor-Nicolae Savu Viksen Data 14 ianuarie 2009 16:26:06
Problema Trapez Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;
vector<double>::iterator next(vector<double>::iterator it) { return ++it; }

int main()
{
    int n,x,y,current=0,trap=0,crt_v=0;
    vector< pair<int,int> > V;
    vector<double> P;
    fstream fin ("trapez.in" , fstream::in);

    for(fin>>n; n-- ; V.push_back(make_pair(x,y)))
    {
        fin>>x;
        fin>>y; //cout<<x<<' '<<y<<'\n';
        for(vector< pair<int,int> >::iterator it = V.begin() ; it!=V.end() ; it++)
        {
            if (it->first == x)
            {
                current ++;
                cout<<"||\n";
            }
            else
            {
                P.push_back((double)(it->second-y)/(it->first-x));
                cout<<(double)(it->second-y)/(it->first-x)<<'\n';
            }
        }
    }

    fin.close();

    sort(P.begin(),P.end());

    for (vector<double>::iterator it = P.begin() ; it!=P.end(); it++)
    {
        trap+= (current*(current-1)) >>1 ;
        for (current = 1 ; next(it)!=P.end() && (*it - *(next(it)))<0.00001  && (*(next(it)) - *it)<0.00001 ; it++,current++ );
    }

    trap+= (current*(current-1)) >>1 ;

    fstream fout ("trapez.out" , fstream::out);
    fout<<trap<<'\n';
    fout.close();

}