2020 BIT冬训-贪心 H - New York Hotel CodeForces - 491B

Problem Description

Think of New York as a rectangular grid consisting of N vertical avenues numerated from 1 to N and M horizontal streets numerated 1 to MC friends are staying at C hotels located at some street-avenue crossings. They are going to celebrate birthday of one of them in the one of H restaurants also located at some street-avenue crossings. They also want that the maximum distance covered by one of them while traveling to the restaurant to be minimum possible. Help friends choose optimal restaurant for a celebration.

Suppose that the distance between neighboring crossings are all the same equal to one kilometer.

Input

The first line contains two integers N и M — size of the city (1 ≤ N, M ≤ 109). In the next line there is a single integer C (1 ≤ C ≤ 105) — the number of hotels friends stayed at. Following C lines contain descriptions of hotels, each consisting of two coordinates x and y (1 ≤ x ≤ N, 1 ≤ y ≤ M). The next line contains an integer H — the number of restaurants (1 ≤ H ≤ 105). Following H lines contain descriptions of restaurants in the same format.

Several restaurants and hotels may be located near the same crossing.

Output

In the first line output the optimal distance. In the next line output index of a restaurant that produces this optimal distance. If there are several possibilities, you are allowed to output any of them.

Examples

Input
10 10
2
1 1
3 3
2
1 10
4 4
Output
6
2
这题是求曼哈顿距离的最小值。对于每个hotel的坐标(a,b),人的坐标(x,y)
他们的距离为|a-x|+|b-y|。
以每个人为原点。对于人来说的hotel位于第一象限:a - x + b - y,位于第二象限:x - a + b - y,位于第三象限:x - a + y - b,位于第四象限:a - x + y - b。
整理一下则为(a + b)+(-x - y),(-a + b)+(x - y),(-a - b)+(x + y),(a - b)+(-x + y)。
也即是分别求出a+b,-a+b,-a-b,a-b的最大值。然后再与对应的x,y的形式相加后的最大值即为该人距离hotel的曼哈顿距离的最大值。
再遍历所有人,求出最小的那个即可。
#include<cstdio>
#include<algorithm>
using namespace std;
int m,n,a,b,c[4],x,y,ans,sum,res;
int main(){
    scanf("%d%d",&m,&n);
    scanf("%d",&a);
    for(int i=0;i<4;i++)
        c[i]=-1e9+7;
    for(int i=0;i<a;i++){
        scanf("%d%d",&x,&y);
        c[0]=max(c[0],x+y);    
        c[1]=max(c[1],-x+y);
        c[2]=max(c[2],-x-y);
        c[3]=max(c[3],x-y);
    }
    ans=2e9+7;
    scanf("%d",&b);
    for(int i=0;i<b;i++){
        scanf("%d%d",&x,&y);
        int sum=0;
        sum=max(sum,c[0]-x-y);    
        sum=max(sum,c[1]+x-y);
        sum=max(sum,c[2]+x+y);
        sum=max(sum,c[3]-x+y);
        if(sum<ans){
            ans =sum;
            res=i+1;
        }
    }
    printf("%d\n%d",ans,res);
    return 0;
}

 

 
上一篇:C. Hilbert's Hotel


下一篇:ionic list加载淡出淡入效果