Cod sursa(job #2614097)

Utilizator AvramDanielAvram Daniel AvramDaniel Data 11 mai 2020 11:18:37
Problema Patrate 3 Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
#include<iostream>
#include<utility>
#include<vector>
#include<algorithm>
#include<fstream>
#include<math.h>
#define fi first
#define se second
using namespace std;

typedef pair <double, double > bs;

vector< bs  > v[20010];
int n;
bs a[1010];

bool comp(bs i, bs j){
    return (abs(i.fi - j.fi) <= 0.0001 && abs(i.se - j.se) <= 0.0001);
}

bool control(bs pr, bs doi) {
    if(doi.se < pr.se || pr.fi == doi.fi)
        return 0;
    double difx = doi.fi - pr.fi;
    double dify = doi.se - pr.se;

    bs trei = {doi.fi + dify, doi.se - difx};
    bs patru = {pr.fi + dify, pr.se - difx};
    //cout <<"c"<<'\n';

    int i;
    bool u = 0, u2 = 0;
    //cout << (int)(trei.fi) << ": " <<'\n';
    for(i = 0; i < v[(int)(trei.fi) + 10000].size(); i++){
        //cout <<trei.fi<<' '<<trei.se <<' '<< v[(int)(trei.fi) + 10000][i].fi << ' ' << v[(int)(trei.fi) + 10000][i].se <<' '<< (trei.se == v[(int)(trei.fi) + 10000][i].se) <<'\n';
        if(comp(trei, v[(int)(trei.fi) + 10000][i])){
            u = 1;
         //  cout <<"blea!\n";
        }
    }

    //cout <<'\n';
    if(!u)
        return 0;
   // cout << u<<'\n';
    for(i = 0; i < v[(int)(patru.fi) + 10000].size(); i++){
        if(comp(patru, v[(int)(patru.fi) + 10000][i])){
            u2 = 1;
            break;
        }
    }
   // cout << u2 << '\n'<<'\n';
    return u2;
}

int main(){
    ifstream cin("patrate3.in");
    ofstream cout("patrate3.out");
    int ans = 0;
    cin >> n;
    for(int i = 0;i < n;i++){
        cin>>a[i].fi >> a[i].se;
        v[(int)(a[i].fi) + 10000].push_back(a[i]);
       // cout << (int)a[i].fi + 10000 <<'\n';
    }

    sort(a, a+ n);

    /*for(int i = 10000; i< 12000;i++){
        if(v[i].size()){
            cout << i << ": ";
            for(int j = 0; j < v[i].size();j++)
                cout << v[i][j].fi <<' '<<v[i][j].se << ' ';
            cout<<'\n';
        }
    }*/

    for(int i = 0; i < n - 1;i ++){
        for(int j = i + 1;j< n;j++){
            if(control(a[i],a[j])){
                ans ++;
              //  cout << a[i].fi <<' ' << a[i].se <<'\n';
              //  cout << a[j].fi << ' ' << a[j].se << '\n';
            }
        }
    }

    cout <<ans;

    return 0;
}