#include #define X 0 #define Y 1 int m, n; int count; int seiza[200][2] = {0}; int star[1000][2] = {0}; int delta[200][2] = {0}; int seiza_point[2] = {0}; int star_point[2] = {0}; int search(int x, int y) { int i; //最も右上の座標を求める if(x > star_point[X]) { star_point[X] = x; star_point[Y] = y; } else if(x == star_point[X]) { if(y > star_point[Y]) { star_point[X] = x; star_point[Y] = y; } } for(i = 0; i < n; i++) { if(star[i][X] == (x + delta[count][X]) && star[i][Y] == (y + delta[count][Y])) { count++; if(count == m - 1) return 1; return search(star[i][X], star[i][Y]); } } return 0; } int main(void) { int i; scanf("%d", &m); seiza_point[X] = -1; seiza_point[Y] = -1; for(i = 0; i < m; i++) { scanf("%d %d", &seiza[i][X], &seiza[i][Y]); //星と星の間の変位を求める if(i > 0) { delta[i - 1][X] = seiza[i][X] - seiza[i - 1][X]; delta[i - 1][Y] = seiza[i][Y] - seiza[i - 1][Y]; } //最も右上の座標を求める if(seiza[i][X] > seiza_point[X]) { seiza_point[X] = seiza[i][X]; seiza_point[Y] = seiza[i][Y]; } else if(seiza[i][X] == seiza_point[X]) { if(seiza[i][Y] > seiza_point[Y]) { seiza_point[X] = seiza[i][X]; seiza_point[Y] = seiza[i][Y]; } } } scanf("%d", &n); for(i = 0; i < n; i++) { scanf("%d %d", &star[i][X], &star[i][Y]); } for(i = 0; i < n; i++) { count = 0; star_point[X] = -1; star_point[Y] = -1; if(search(star[i][X], star[i][Y])) break; } printf("%d %d", star_point[X] - seiza_point[X], star_point[Y] - seiza_point[Y]); return 0; }