题目链接:http://acm.swust.edu.cn/problem/188/
Time limit(ms): 1000 Memory limit(kb): 65535
江鸟来到了一个很奇怪的星球,这个星球上,有两个二维坐标系XX和YY,这两个坐标系之间的坐标存在如下函数关系式:
f(x)=x^2+2*x+3
f(y)=3*y+2
比如对于XX坐标系上的点(3,4)经过这一关系映射后得到YY坐标系上的点为(18,14)。这个映射关系一;同时,还有种映射关系是对于X坐标系上的点(a,b)和YY坐标系上的点(c,d)他们之间的距离为D=|a-d|+|b-c|。这是映射关系二.
因为对于XX坐标系上的每个点,在YY坐标系上都有唯一的点和它对应,现在对于XX和YY上的点按照映射关系二进行匹配,并且XX上的每个点都仅和YY上的一个点进行匹配,YY上的每个点也仅和XX上的一个点进行匹配,现在你的任务是找出所有可能匹配关系中D最大值的最小。
f(x)=x^2+2*x+3
f(y)=3*y+2
比如对于XX坐标系上的点(3,4)经过这一关系映射后得到YY坐标系上的点为(18,14)。这个映射关系一;同时,还有种映射关系是对于X坐标系上的点(a,b)和YY坐标系上的点(c,d)他们之间的距离为D=|a-d|+|b-c|。这是映射关系二.
因为对于XX坐标系上的每个点,在YY坐标系上都有唯一的点和它对应,现在对于XX和YY上的点按照映射关系二进行匹配,并且XX上的每个点都仅和YY上的一个点进行匹配,YY上的每个点也仅和XX上的一个点进行匹配,现在你的任务是找出所有可能匹配关系中D最大值的最小。
Description
第一行输入一个数case,代表下面测试数据的总数,以下每个case由两部分组成:
第一部分输入N,代表XX坐标系上有多少个点(1<=N<=100)
第二部分输入XX坐标系上这N个点的坐标 (xi,yi)(0<=xi<=500,0<=yi<=500)
第一部分输入N,代表XX坐标系上有多少个点(1<=N<=100)
第二部分输入XX坐标系上这N个点的坐标 (xi,yi)(0<=xi<=500,0<=yi<=500)
Input
所有可能匹配关系中D最大值的最小
Output
1
2
3
4
5
|
1
2
3 4
1 2
|
Sample Input
1
|
25
|
Sample Output
解题思路:按照题意来就是了,但是所有 匹配关系中D最大值的最小 没懂起意思(各种wa),我也是醉了~~
求出所有的对应点,原点集和映射点集一一比对,有最大D时,
求此时原来的点对应映射点集的最小D
en~~,没听懂就看看代码吧,就这样~~~
代码如下:
#include <iostream>
#include <cmath>
using namespace std; inline int mapping_x(int x){
return x*(x + ) + ;
}
inline int mapping_y(int y){
return * y + ;
}
inline int mapping_dis(int x, int y){
return abs(x - y);
}
int main(){
int t, n, i, j, k, maxn, Max, ptr[][];
cin >> t;
while (t--){
cin >> n;
Max = 0x7ffffff;
for (i = ; i < n; i++){
cin >> ptr[i][] >> ptr[i][];
ptr[i][] = mapping_x(ptr[i][]);
ptr[i][] = mapping_y(ptr[i][]);
}
for (i = ; i < n; i++){
for (maxn = j = ; j < n; j++){
k = mapping_dis(ptr[i][], ptr[j][]) + mapping_dis(ptr[i][], ptr[j][]);
maxn = maxn>k ? maxn : k;
}
Max = Max < maxn ? Max : maxn;
}
cout << Max << endl;
}
return ;
}