雑記・まとめ

個人的な備忘録

joi2008yo_d

これと同じ感じ
気が付けば過去問精選100問の工夫して通り数を減らす全列挙まで終了


tanukistune.hatenablog.com

 

#include<bits/stdc++.h>
using namespace std;

int m, n;

vector < pair<int, int> > vm;
vector < pair<int, int> > vn;
map < pair<int, int >, bool > np;

int main(){

    cin >> m;
    for(int i=0;i<m;i++){
        int x, y;
        cin >> x >> y;
        vm.push_back( make_pair(x, y) );
    }

    cin >> n;
    for(int i=0;i<n;i++){
        int x, y;
        cin >> x >> y;
        vn.push_back( make_pair(x, y) );
        np[vn[i]] = true;
    }


    for(int i=0;i<n;i++){

        int dx = vn[i].first - vm[0].first;
        int dy = vn[i].second - vm[0].second;

        int cnt = 0;
        for(int j=0;j<m;j++){
            int ddx = vm[j].first + dx;
            int ddy = vm[j].second + dy;

            if(np[ make_pair(ddx, ddy) ] == 1) cnt++;
        }

        if(cnt == m){
            cout << dx << " " << dy << endl;
            break;
        }
    }
}