Cod sursa(job #2846065)

Utilizator vladutzu_finutzuVlad Cacenschi vladutzu_finutzu Data 8 februarie 2022 18:42:53
Problema Trapez Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define x first
#define y second
using namespace std;
ifstream cin("trapez.in");
ofstream cout("trapez.out");
int n;
vector< pair<long long, long long> > l, c;
vector <long long> p;

bool cmp1(pair<int, int> a, pair<int, int> b)
{
    return (a.x < b.x or (a.x == b.x and a.y < b.y));
}

bool cmp2(pair<int, int> a, pair<int, int> b)
{
    return (a.y < b.y or (a.y == b.y and a.x < b.x));
}

int main(int argc, const char * argv[]) {
    cin>>n;
    l.resize(n);
    
    for(int i=0; i<n; i++)
    {
        cin>>l[i].x>>l[i].y;
        c.push_back(l[i]);
    }
    
    sort(l.begin(), l.end(), cmp1);
    sort(c.begin(), c.end(), cmp2);
    
    int fr = 1, sol = 0, count=0;
    for(int i=1; i<n; i++)
    {
        if(l[i].x == l[i-1].x)
            fr++;
        
        else
        {
            count += (fr-1) * fr / 2;
            fr = 1;
        }
    }

    count += (fr-1) * fr / 2;

    sol += (count-1) * count / 2;

    count = 0;
    fr = 1;
    for(int i=1; i<n; i++)
    {
        if(c[i].y == c[i-1].y)
            fr++;
        
        else
        {
            count += (fr-1) * fr / 2;
            fr = 1;
        }
    }

    count += (fr-1) * fr / 2;

    sol += (count-1) * count / 2;

    cout<<sol;
    
    return 0;
}