题目描述
传说在遥远的过去,有一个大魔王盘踞在ACM/ICPC实验室里。
大魔王非常强大,而且他旗下有甲乙丙丁四大护法,想要见到大魔王,勇士必须一一打倒甲乙丙丁这四位护法。
这天,新的勇士带领着他的队友又一次的向实验室发起了进攻。迎接他们的,首先是甲护法。
甲护法最近沉迷正方形,立志把实验室里所有的长方形都裁剪为正方形。他告诉勇士,实验室里有T个长方形,每个长方形的边平行于坐标系的X轴或者Y轴。甲护法会给出每一个长方形对角线上的顶点A、B的坐标,勇士保持A坐标不变,把长方形改成比原来长方形小的最大的正方形,并得出新正方形的A、B1、C1、D1四点坐标(顺时针),那就算勇士赢了。
亲爱的勇士,赢了这位护法,就离大魔王更近了呢!
输入
第一行包含一个数字T(T <= 100), 表示测试数据组数。
接下来T行,每一行包括4个整数x1、y1、x2、y2(-100000 <= x1, y1,x2,y2 <= 100000),分别表示A、B两点的坐标。
输出
每组输入对应输出一行8个整数,表示正方形的A、B1、C1、D1四点坐标(顺时针)。
样例输入 Copy
2
0 0 2 3
3 2 -1 -1
样例输出 Copy
0 0 0 2 2 2 2 0
3 2 3 -1 0 -1 0 2
代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,x1,x2,y1,y2,c,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
c=fabs(x1-x2);
if(fabs(y1-y2)<c)c=fabs(y1-y2);
if(x1>x2&&y1>y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1,y1-c,x1-c,y1-c,x1-c,y1);
if(x1<x2&&y1<y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1,y1+c,x1+c,y1+c,x1+c,y1);
if(x1>x2&&y1<y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1-c,y1,x1-c,y1+c,x1,y1+c);
if(x1<x2&&y1>y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1+c,y1,x1+c,y1-c,x1,y1-c);
}
return 0;
}