九度oj-1020

题目描述:

给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。

输入:

测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于 231;一对0 坐标标志着一个测试用例的结束。注意(0, 0)不作为任何一个测试用例里面的点。一个没有点的测试用例标志着整个输入的结束。

输出:

对每个测试用例,在1行内输出2对整数,其间用一个空格隔开。第1对整数是长方形框左下角的坐标,第2对整数是长方形框右上角的坐标。

样例输入:

12 56
23 56
13 10
0 0
12 34
0 0
0 0

样例输出:

12 10 23 56
12 34 12 34

代码:

#include <iostream>  
using namespace std;  

int main(){  
int m,n;  
while(cin>>m>>n){  
    if(m == 0 && n == 0)  
        break;  
    int x,y;  
    int x_min = 231;  
    int y_min = 231;  
    int x_max = -231;  
    int y_max = -231;  
    x = m;  
    y = n;  
    if(x<x_min)  
        x_min = x;  
    if(y<y_min)  
        y_min = y;  
    if(x>x_max)  
        x_max = x;  
    if(y>y_max)  
        y_max = y;  
    while(cin>>x>>y){  
        if(x == 0 && y == 0)  
            break;  
        if(x<x_min)  
            x_min = x;  
        if(y<y_min)  
            y_min = y;  
        if(x>x_max)  
            x_max = x;  
        if(y>y_max)  
            y_max = y;  
    }  
    cout<<x_min<<" "<<y_min<<" "<<x_max<<" "<<y_max<<endl;  
}  
return 0;  
}  

作者提醒

题目大意:看似是求包含所有点的最小长方形,
实则是求所有的点的横纵坐标的最小值,横纵坐标的最大值。
因为这道题给定的条件是长方形的边与x,y轴平行,所以本题存在很大的特殊性。