1816: 矩形

来源:互联网 发布:ipadpro网络不稳定 编辑:程序博客网 时间:2024/06/15 19:26

http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1816

一开始执着于固定左边的矩形,枚举右边的位置,不知道哪里错了,至今还是没找到bug,后面直接考虑坐标

1816: 矩形

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 150  Solved: 46

SubmitStatusWeb 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 20 0 1 1 0 0 2 2-2 -2 2 2 1 -3 3 -1

Sample Output

16419

HINT

Source

#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <queue>#include <vector>#include <set>#define LL long longusing namespace std;const int SIZE=1e0+50;const int maxn=1<<30;int main(){    int T;    LL x[5],y[5];    scanf("%d",&T);    for(int cas=1;cas<=T;cas++){        for(int i=1;i<=4;i++){            scanf("%lld%lld",&x[i],&y[i]);        }        LL s=(x[2]-x[1])*(y[2]-y[1])+(x[4]-x[3])*(y[4]-y[3]);        LL w=(x[2]-x[1])+(x[4]-x[3])-max(max(x[1],x[2]),max(x[3],x[4]))+min(min(x[1],x[2]),min(x[3],x[4]));        LL h=(y[2]-y[1])+(y[4]-y[3])-max(max(y[1],y[2]),max(y[3],y[4]))+min(min(y[1],y[2]),min(y[3],y[4]));        if(w<=0||h<=0)printf("%lld\n",s);        else printf("%lld\n",s-w*h);    }    return 0;}


 

0 0
原创粉丝点击