Untitled

mail@pastecode.io avatar
unknown
c_cpp
20 days ago
2.2 kB
6
Indexable
Never
#include <bits/stdc++.h>
#define ll long long
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
#define mat vector<vector<ll>> 
#define pb push_back
#define ALL(v) v.begin(), v.end()
#define SZ(a) (int) a.size()
using namespace std;
void db() {cout << '\n';}
template <typename T, typename ...U> void db(T a, U ...b) { 
cout << a << ' ', db(b...);}
#ifdef Cloud
#define file freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout)
#else
#define file ios::sync_with_stdio(false); cin.tie(0)
#endif
const int inf = 1ll << 61, N = 2005, mod = 1e9 + 7, INF = 1ll << 61;

void solve(){
    int n; cin >> n;
    vector<pii> a(n), b(n);
    for(int i = 0; i < n; ++i){
        cin >> a[i].fi >> a[i].se;
    }
    for(int i = 0; i < n; ++i){
        cin >> b[i].fi >> b[i].se;
    }

    sort(ALL(a));
    sort(ALL(b));

    if(b[0].fi == b[n - 1].fi and b[0].se == b[n - 1].se){
        db(0, b[0].fi, b[0].se);
        return;
    }

    int dbx = b[n - 1].fi - b[0].fi, dax = a[n - 1].fi - a[0].fi;
    int fx = 0, fy = 0, S = -1, X = -1, Y = -1;
    if(dbx == 0 and dax == 0){
        fx = 1;
    }
    else if(dbx == 0 or dax == 0 or (dbx % dax) != 0){
        db(-1);
        return;
    }
    else{
        S = dbx / dax;
        X = b[0].fi - S * a[0].fi;
    }

    int dby = b[n - 1].se - b[0].se, day = a[n - 1].se - a[0].se;
    if(dby == 0 and day == 0) fy = 1;
    else if(dby == 0 or day == 0 or (dby % day) != 0){
        db(-1);
        return;
    }
    else{
        if(S != -1 and S != (dby / day)){
            db(-1);
            return;
        }
        S = dby / day;
        Y = b[0].se - S * a[0].se;
    }

    if(fx == 1 and fy == 1){
        S = 0, X = b[0].fi, Y = b[0].se;
    }
    else if(fx == 1){
        X = b[0].fi - S * a[0].fi;
    }
    else if(fy == 1){
        Y = b[0].se - S * a[0].se;
    }

    for(int i = 0; i < n; ++i){
        int x = a[i].fi * S + X;
        int y = a[i].se * S + Y;
        if(x != b[i].fi or y != b[i].se){
            db(-1);
            return;
        }
    }

    db(S, X, Y);
}

signed main(){
    file;
    int t = 1;
    // cin >> t;
    while (t--) solve();
}
Leave a Comment