CODE[VS] 2614 安全区域

题目描述 Description

    mark有一块100×100的矩形的土地,左下角的坐标为(0,0)右上角的坐标为(100,100)。他无聊的时候在里面种满了西瓜,但是总有人来偷,于是他买了两个守卫。

    一个守卫的守卫范围是(x1,y1)到(x2,y2)的一块矩形范围,其中(x1,y1)代表左下角(x2,y2)代表右上角。

    mark认为被两个守卫看护的区域是强安全区域,仅被一个守卫看护的区域是弱安全区域,而没有被守卫看护的区域是不安全区域。现在mark想让你告诉他这三种区域的面积分别是多少。

 

输入描述 Input Description

    输入有两行,每行四个整数x1,y1,x2,y2;分别表示两个守卫的看护区域。

    其中0≤x1<x2,y1<y2≤100,且两个矩形肯定有公共区域。

输出描述 Output Description

      一行三个整数分别表示强安全区域,弱安全区域,不安全区域的面积。

 

样例输入 Sample Input

10 10 20 20 

15 15 25 25

样例输出 Sample Output

25 150 9825

 

数据范围及提示 Data Size & Hint

三种情况

 

这题看起来挺麻烦,

本来不想做的。。。

这种手算起来非常简单的题,,,

写成代码是挺麻烦。

 

此题无非就是几种情况。。

先判断出没有强安全区域的时候,(上下左右四种)

 

剩下的再分四种分别判断计算(左上左下右上右下),其实还有一种被包围在里面,

所以说不严谨,但交上去也能过。

 

 

是个纯模拟题,下面给出

以上思路的ac代码:

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int x,y,xx,yy;
 9 int a,b,aa,bb;
10 int strong,thin,none;
11 
12 int main()
13 {
14     scanf("%d%d%d%d",&x,&y,&xx,&yy);
15     scanf("%d%d%d%d",&a,&b,&aa,&bb);
16     thin=(aa-a)*(bb-b)+(xx-x)*(yy-y);
17     if(a>xx||b>yy||aa<x||bb<y) 
18     {        
19         none=10000-thin;
20         printf("0 %d %d",thin,none);
21         return 0;
22     }
23     else
24     {
25         if(a>=x&&a<=xx&&bb>=y&&bb<=yy)        
26             strong=(xx-a)*(bb-y);
27         if(a>=x&&a<=xx&&b>=y&&b<=yy)        
28             strong=(xx-a)*(yy-b);        
29         if(aa>=x&&aa<=xx&&bb>=y&&bb<=yy)        
30             strong=(aa-x)*(bb-y);        
31         if(aa>=x&&aa<=xx&&b>=y&&b<=yy)
32             strong=(aa-x)*(yy-b);            
33         none=10000-thin+strong;
34         thin-=strong*2;
35         printf("%d %d %d",strong,thin,none);
36         return 0;
37     }
38 }

 

测试点比较少,能过,,

感觉很牵强,,,

 

推荐按照题解给出的方法,

二维数组做更简单一些吧。

可以看成是100*100个小格,每个小格面积为一。

循环用二维数组将第一个矩形内的小格都置为1,

当循环第二个矩形时,如果有被置为1的,那就是重合的,

强安全区域++就好了,顺便再置为2,表示重复区域,

非重复区域可以置为0;

然后2的区域就是强安全区域,

1和0的区域就是弱安全区域,

剩下的就是不安全的了。

 

思路大概就是这样,,

代码不写了。

 


如果你不开心,那我就把右边这个帅傻子分享给你吧,
你看,他这么好看,跟个zz一样看着你,你还伤心吗?
真的!这照片盯上他五秒钟就想笑了。
一切都会过去的。
时间时间会给你答案2333

 

posted @ 2018-06-17 10:39  孟东行#  阅读(300)  评论(0编辑  收藏  举报