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;
}
}
}