Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 1010
- #define mp make_pair
- #define ff first
- #define ss second
- typedef long long ll;
- using namespace std;
- struct myStruct
- {
- ll x, y, mx, my;
- myStruct() {}
- myStruct(ll x, ll y, ll mx, ll my ) : x(x), y(y), mx(mx), my(my){};
- bool operator < (const myStruct &o) const
- {
- if ( x != o.x ) return x < o.x;
- if ( y != o.y ) return y < o.y;
- if ( mx != o.mx ) return mx < o.mx;
- return my < o.my;
- }
- };
- ll gcd(ll a, ll b)
- {
- if ( b == 0ll) return a;
- return gcd(b, a%b);
- }
- int xs[MAX];
- int ys[MAX];
- int main()
- {
- int n;
- cin>>n;
- map<pair<ll, ll>, ll> map1;
- map<myStruct, ll> map2;
- for( int i = 0; i < n; i++ )
- {
- cin>>xs[i]>>ys[i];
- xs[i] *= 2ll;
- ys[i] *= 2ll;
- }
- for( int i = 0; i < n; i++ )
- {
- for( int j = i+1; j < n; j++ )
- {
- ll cx = (xs[i]+xs[j])/2ll;
- ll cy = (ys[i]+ys[j])/2ll;
- ll dx = xs[i] - xs[j];
- ll dy = ys[i] - ys[j];
- ll myGcd = gcd(dx, dy);
- dx /= myGcd;
- dy /= myGcd;
- map1[mp(cx, cy)] = map1[mp(cx, cy)] + 1ll;
- map2[myStruct(cx, cy, dx, dy)] = map2[myStruct(cx, cy, dx, dy)] + 1ll;
- }
- }
- ll result = 0ll;
- for( auto v : map2 )
- {
- result += v.ss*(map1[mp(v.ff.x, v.ff.y)] - v.ss);
- }
- result /= 2ll;
- cout<<result<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement