[Swust OJ 188]--异面空间(读懂题意很重要)
题目链接: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~~,没听懂就看看代码吧,就这样~~~
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 inline int mapping_x(int x){ 6 return x*(x + 2) + 3; 7 } 8 inline int mapping_y(int y){ 9 return 3 * y + 2; 10 } 11 inline int mapping_dis(int x, int y){ 12 return abs(x - y); 13 } 14 int main(){ 15 int t, n, i, j, k, maxn, Max, ptr[101][4]; 16 cin >> t; 17 while (t--){ 18 cin >> n; 19 Max = 0x7ffffff; 20 for (i = 0; i < n; i++){ 21 cin >> ptr[i][0] >> ptr[i][1]; 22 ptr[i][2] = mapping_x(ptr[i][0]); 23 ptr[i][3] = mapping_y(ptr[i][1]); 24 } 25 for (i = 0; i < n; i++){ 26 for (maxn = j = 0; j < n; j++){ 27 k = mapping_dis(ptr[i][0], ptr[j][3]) + mapping_dis(ptr[i][1], ptr[j][2]); 28 maxn = maxn>k ? maxn : k; 29 } 30 Max = Max < maxn ? Max : maxn; 31 } 32 cout << Max << endl; 33 } 34 return 0; 35 }
如果这是你所爱的,就不要让自己后悔~~~