• 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

     

  • 相关阅读:
    CentOS Python 安装MySQL-python
    Ubuntu64位安装Adobe Reader 9.5.5
    Codeforces Round #316 (Div. 2) (ABC题)
    cocos2dx 3.2+ 项目创建与问题总汇
    Mongodb的索引
    uva 12083 Guardian of Decency (二分图匹配)
    Linux查看内存使用量和交换区使用量
    053第423题
    [Python]xlrd 读取excel 日期类型2种方式
    求解组合问题的一个迭代算法
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9192261.html
Copyright © 2020-2023  润新知