Problem: [USACO2018 Jan]Blocked Billboard II

Problem: [USACO2018 Jan]Blocked Billboard II

Time Limit: 1 Sec Memory Limit: 128 MB

Description

奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌(但覆盖的这块面积不一定在广告牌上)
现在她要取一块足够大的布来将剩下的部分覆盖,问至少要多大的矩形的布才能覆盖剩下的广告牌。

Input

输入共两行。
第一行四个整数,l1,r1,l2,r1,描述广告牌左下和右上两个坐标(l1,r1)和(l2,r2)。
第二行四个整数,x1,y1,x2,y2,描述覆盖的位置的左下和右上两个坐标(x1,y1)和(x2,y2)。
所有数值都在-1000~1000范围内。

Output

一行一个整数,表示需要的最小的矩形的布。

Sample Input

2 1 7 4
5 -1 10 3

Sample Output

15
代码如下·

#include<stdio.h>
int l1,r1,l2,r2,x1,y1,x2,y2,sum,a,b,c,d;
int main() {
    scanf("%d %d %d %d %d %d %d %d",&l1,&r1,&l2,&r2,&x1,&y1,&x2,&y2);
    if(l1>x1&&r1>y1) {sum++;a=1;}
    if(l1>x1&&r2<y2) {sum++;b=1;}
    if(l2<x2&&r1>y1) {sum++;c=1;}
    if(l2<x2&&r2<y2) {sum++;d=1;}
    switch(sum) {
        case 0:{
            printf("%d",(l2-l1)*(r2-r1));
            break;
        }
        case 1:{
            printf("%d",(l2-l1)*(r2-r1));
            break;
        }
        case 2:{
            if(a&&b) printf("%d",(l2-x2)*(r2-r1));
            if(a&&c) printf("%d",(l2-l1)*(r2-y2));
            if(b&&d) printf("%d",(l2-l1)*(y1-r1));
            if(c&&d) printf("%d",(x1-l1)*(r2-r1));
            break;
        }
        case 4:{
            printf("%d",0);
            break;
        }
    }
}
原文地址:https://www.cnblogs.com/ZhaoChongyan/p/11740445.html