游客 Signup | Login
中文 | En

1640 - 最小长方形

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

Input

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

Output

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

Examples

Input

-41 35
26 45
13 30
0 0
-5 13
0 0
0 0

Output

-41 30 26 45
-5 13 -5 13

Hint

我们可以发现横纵坐标的计算其实是独立的,对于每个坐标更新当前横纵坐标的最小值和最大值即可。

Solution C

#include <stdio.h>
int main()
{
  while(1)
  {
    int minx=1000;
    int maxx=-1000;
    int miny=1000;
    int maxy=-1000;
    int x,y;
    int flag=0;
    while(1)
    {
      scanf("%d%d",&x,&y);
      if(x==0&&y==0)
      {
        if(flag==0)
        {
          return 0;
        }
        flag=0;
        printf("%d %d %d %d\n",minx,miny,maxx,maxy);
        break;
      }
      if(flag==0)
      {
        flag=1;
      }
      if(minx>x)
      {
        minx=x;
      }
      if(miny>y)
      {
        miny=y;
      }
      if(maxx<x)
      {
        maxx=x;
      }
      if(maxy<y)
      {
        maxy=y;
      }
    }
  }
}

Solution C++

#include <cstdio>
#include <cstring>

void updatemin(int & minv, int v) {
    if (v < minv) minv = v;
}

void updatemax(int & maxv, int v) {
    if (v > maxv) maxv = v;
}

int main() {
    while (true) {
        int x, y;
        scanf("%d %d", &x, &y);
        if (0 == x && 0 == y)
            break;
        int minx = x, miny = y;
        int maxx = x, maxy = y;
        while (true) {
            scanf("%d %d", &x, &y);
            if (0 == x && 0 == y)
                break;
            updatemin(minx, x);
            updatemin(miny, y);
            updatemax(maxx, x);
            updatemax(maxy, y);
        }
        printf("%d %d %d %d\n", minx, miny, maxx, maxy);
    }
    return 0;
}

Hint

我们可以发现横纵坐标的计算其实是独立的,对于每个坐标更新当前横纵坐标的最小值和最大值即可。

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题