您的位置:首页 > 其它

[Swust OJ 188]--异面空间(读懂题意很重要)

2015-06-12 20:36 246 查看
题目链接: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最大值的最小。

Description

第一行输入一个数case,代表下面测试数据的总数,以下每个case由两部分组成:
第一部分输入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 + 2) + 3;
}
inline int mapping_y(int y){
return 3 * y + 2;
}
inline int mapping_dis(int x, int y){
return abs(x - y);
}
int main(){
int t, n, i, j, k, maxn, Max, ptr[101][4];
cin >> t;
while (t--){
cin >> n;
Max = 0x7ffffff;
for (i = 0; i < n; i++){
cin >> ptr[i][0] >> ptr[i][1];
ptr[i][2] = mapping_x(ptr[i][0]);
ptr[i][3] = mapping_y(ptr[i][1]);
}
for (i = 0; i < n; i++){
for (maxn = j = 0; j < n; j++){
k = mapping_dis(ptr[i][0], ptr[j][3]) + mapping_dis(ptr[i][1], ptr[j][2]);
maxn = maxn>k ? maxn : k;
}
Max = Max < maxn ? Max : maxn;
}
cout << Max << endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: