1816: 矩形
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 95 Solved: 26
Submit Status Web Board
Description
小S和小D两个小雪参,在玩一个关于矩形的游戏以帮助他们学会怎么计算矩形的面积然后完成作业去打游戏(两个小雪参一起打游戏你怕不怕!)。他们约定每个人给出两个坐标,分别是两个矩形的左下角和右上角的坐标,他们的游戏规则很简单,就是看谁先找出来这两个矩形的覆盖的总面积大小。你的问题就是帮助他们给出正确答案。
Input
输入的第一行为一个整数T,代表样例的组数。
每组样例包含4个坐标(x,y),( -100000000<= x,y <= 100000000 )前两个是小S给出的矩形左下角和右上角的坐标,后面两个是小D给出来的坐标。
Output
输出两个矩形覆盖的总面积大小。
Sample Input
3
-2 -2 2 2 -2 -2 2 2
0 0 1 1 0 0 2 2
-2 -2 2 2 1 -3 3 -1
Sample Output
16
4
19
//用暴力写,写了一下午,WAWAWA,这是好友写的,好机智。感觉自己好笨。。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define ll double
using namespace std;
int main()
{
int t;
ll x1,x2,x3,x4,y1,y2,y3,y4;
ll x[5];
ll y[5];
ll sum,num;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
x[1]=x1;x[2]=x2;x[3]=x3;x[4]=x4;
y[1]=y1;y[2]=y2;y[3]=y3;y[4]=y4;
sort(x+1,x+5);
sort(y+1,y+5);
sum=(y2-y1)*(x2-x1)+(y4-y3)*(x4-x3);
int l=(x2-x1)+(x4-x3)-(x[4]-x[1]);
int h=(y2-y1)+(y4-y3)-(y[4]-y[1]);
num=h*l;
if(l<=0||h<=0)
printf("%.0lf\n",sum);
else
printf("%.0lf\n",sum-num);
}
return 0;
}
//我的暴力 WAWAWA
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define ll long long
using namespace std;
int main()
{
int t;
ll x1,x2,x3,x4,y1,y2,y3,y4;
ll x,y;
ll sum,sum1,sum2;
scanf("%d",&t);
while(t--)
{
int sum3=0;
scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
if(x1>x3)
{
x=x1;x1=x3;x3=x;
y=y1;y1=y3;y3=y;
x=x2;x2=x4;x4=x;
y=y2;y2=y4;y4=y;
}
sum1=abs((y2-y1)*(x2-x1));
sum2=abs((y4-y3)*(x4-x3));
sum=sum1+sum2;
if(x3>=x1&&x2<=x4&&y3>=y1&&y4<=y2)
printf("%lld\n",sum1);
else if(x3==x1&&x2<=x4&&y3<=y1&&y4>=y2)
printf("%lld\n",sum2);
else if(x3>=x2||y3>=y2)
printf("%lld\n",sum);
else
{
if(x2>x3&&y2>y3&&y1<=y3&&x4>=x2&&y4>=y2)
{
sum3=abs((x2-x3)*(y2-y3));
printf("%lld\n",sum-sum3);
}
else if(x2>x3&&y2>y3&&y1<=y3&&x4<x2&&y4>=y2)
{
sum3=abs((x4-x3)*(y2-y3));
printf("%lld\n",sum-sum3);
}
else if(x2>x3&&y2>y3&&y1<=y3&&x4>=x2&&y4<y2)
{
sum3=abs((x2-x3)*(y4-y3));
printf("%lld\n",sum-sum3);
}
else if(x2>x3&&y4>y1&&y4<=y2&&x4>=x2&&y3<=y1)
{
sum3=abs((x2-x3)*(y4-y1));
printf("%lld\n",sum-sum3);
}
else if(x2>x3&&y4>y1&&y4<=y2&&x4<x2&&y3<=y1)
{
sum3=abs((x4-x3)*(y4-y1));
printf("%lld\n",sum-sum3);
}
else if(x2>x3&&y4>y1&&y4<=y2&&x4>x2&&y3>y1)
{
sum3=abs((x2-x3)*(y4-y3));
printf("%lld\n",sum-sum3);
}
else if(x2>x3&&x4>x2&&y3<=y1&&y4>=y2)
{
sum3=abs((x2-x3)*(y2-y1));
printf("%lld\n",sum-sum3);
}
else if(x2>x3&&x4<=x2&&y3<y1&&y4>y2)
{
sum3=abs((x4-x3)*(y2-y1));
printf("%lld\n",sum-sum3);
}
}
}
return 0;
}