首页 > 其他分享 >HDU 2056:Rectangles(两个矩形交点的性质)

HDU 2056:Rectangles(两个矩形交点的性质)

时间:2024-03-14 12:14:23浏览次数:24  
标签:HDU 对角 4.00 2056 double two 坐标 矩形 Rectangles

一、原题链接

Problem - 2056 (hdu.edu.cn)

二、题面

Given two rectangles and the coordinates of two points on the diagonals of each rectangle,you have to calculate the area of the intersected part of two rectangles. its sides are parallel to OX and OY .

三、示例

  1. 输入

    • Input The first line of input is 8 positive numbers which indicate the coordinates of four points that must be on each diagonal.The 8 numbers are x1,y1,x2,y2,x3,y3,x4,y4.That means the two points on the first rectangle are(x1,y1),(x2,y2);the other two points on the second rectangle are (x3,y3),(x4,y4).
      
    • 1.00 1.00 3.00 3.00 2.00 2.00 4.00 4.00
      5.00 5.00 13.00 13.00 4.00 4.00 12.50 12.50
      
  2. 输出

    • Output For each case output the area of their intersected part in a single line.accurate up to 2 decimal places.
      
    • 1.00
      56.25
      

五、思路

  1. 已知,当给出一个矩形两个对角点的坐标\((x_1,y_1),(x_2,y_2)\)可确定一个矩形的坐标和大小,且该矩形的两边必然与矩形的两边平行

    image-20240314113202351

    注:已知对角点A(0,0),B(1,1)即可知道矩形的坐标与大小

  2. 题目中给出了两个矩形的两个对角点坐标,要求相交部分的大小。显然,如果有相交部分,则该相交部分必为与坐标轴平行的矩形,故题目可转化为求该矩形的两个对角点

    image-20240314114036501

    注:要求相交部分,只需求点I,J即可

  3. 如已知两个矩形的对角点坐标\((x_G,y_G),(x_H,y_H),(x_A,y_A),(x_B,y_B)\),考虑对角点\((x_I,y_I),(x_J,y_J)\)的性质(以x坐标为例)

    • 性质一:在数值上,由于求的是交集,\(x_I,x_J\)必为\(x_G,x_H,x_A,x_B\)的中间数
    • 性质二:由于\(I(x_I,y_I),G(x_G,y_G)\)两点同时在两个矩形上,故有\(x_G<=x_I<=x_H,x_A<=x_I<=x_B\)(\(x_G\)类似)

六、code

#include <bits/stdc++.h>

#define PI 3.1415927

using namespace std;
typedef double elemType;

typedef struct{
    double x,y;
}Point;

bool contain(double num,double range1,double range2){
    if(range1>range2){
        swap(range1,range2);
    }
    return num>=range1&&num<=range2?true:false;
}

int main()
{
    Point p[2][2];  //二维数组:第一维表示第几个矩形,第二位表示第几个点
    double x[4],y[4];
    while(cin >> p[0][0].x >> p[0][0].y >> p[0][1].x >> p[0][1].y >> p[1][0].x >> p[1][0].y >> p[1][1].x >> p[1][1].y){
        //根据性质一:选取可能的交点:交点必然在内部
        int num=0;
        for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
                x[num]=p[i][j].x;
                y[num]=p[i][j].y;
                num++;
            }
        }
        sort(x,x+4);
        sort(y,y+4);
        Point ans[2];
        ans[0].x=x[1];
        ans[1].x=x[2];
        ans[0].y=y[1];
        ans[1].y=y[2];
        //根据性质二:判断两点是否有效
        bool flag=1;
        for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
                if(!contain(ans[i].x,p[j][0].x,p[j][1].x)||!contain(ans[i].y,p[j][0].y,p[j][1].y)){
                    flag=0;
                }
            }
        }
        printf("%.2lf\n",flag?(ans[1].y-ans[0].y)*(ans[1].x-ans[0].x):0);
    }
    return 0;
}

标签:HDU,对角,4.00,2056,double,two,坐标,矩形,Rectangles
From: https://www.cnblogs.com/Arno-vc/p/18072568

相关文章

  • [HDU6647] Bracket Sequences on Tree 题解
    [HDU6647]BracketSequencesonTree题解一道纯靠自己推出来的换根\(dp+\)树哈希,写篇题解庆祝一下~~题意:给定一棵无根树,你可以任意选择根节点和遍历顺序,每次遍历时进入一个节点就标记一个(,离开一个节点就标记一个),问所有存在的括号序列有多少种,对998244353取模。先考虑根固......
  • 手把手教你免费用Flashduty做消息通知
    为什么需要消息通知?如果有重要的情况发生,希望能通过各种媒介通知我们。可以举几个例子:家里燃气费没有了,希望能有短信或者app通知api频繁500报错,希望及时感知,及时修复公司网站是https自签名证书,为了保证可用性,每天会有e2e测试保证证书的有效性,如果过期及时通知为什么不用腾......
  • 【题解】「HDU 7084」Pty loves string
    CQBZOJHDU7084不难想到把最终在\(S\)从中间分开,就变成了前后两个broder拼起来。考场重现:直接把所有的broder求出来,将相同长度的broder的下标存在一起,然后暴力匹配,最后还没来及优化。考场代码(除了fail树,其她其实都挺逼近正解正解是建出fail树(甚至搞忘还有这东......
  • 题解 CF983D Arkady and Rectangles
    \(\texttt{link}\)题意平面直角坐标系上给定\(n\)个矩形,第\(i\)个矩形颜色为\(i\),颜色大的矩形将覆盖颜色小的矩形,问最后能看到几种颜色。\(1\len\le10^5,|x_i|,|y_i|\le10^9\)题解首先离散化,考虑扫描线如何维护序列上的颜色。一个区间\([l,r]\)投射到线段树上\(......
  • UOJ228/HDU5828 基础数据结构练习题/Rikka with Sequence 题解(势能线段树)
    势能线段树。如果线段树上一个节点的\(\max-\min\ge2\),我们称其为关键节点,考虑定义势能\(\phi\)为线段树上关键节点的个数。对于每次开方操作,如果当前节点为关键节点,则暴力递归左右儿子修改,否则:如果当前节点\(\max=\min\)或\(\max=\min+1\)且\(\max\)不是完全平方数,......
  • hdu5213
    我们看到双区间询问,可以想一下怎么转换成单区间询问这个用容斥原理写也非常简单\(f(L,V)\)指的是\(f(L,U-1)\)和\(f(R+1,V)\)指的是会发现中间被多减了一次,所以加回来有\(f(R+1,U-1)\)于是就转换成了单区间询问题目没有对序列进行修改,所以可以离线处理所有询问,使用莫队算......
  • hdu3929
    二项式定理有两个性质,第一个是高中就接触过的,即奇数项(这里的奇数项与题目的奇数项定义不同)和偶数项系数之和相同第二个也可以记住当然这也告诉我们:中途一旦产生进位了,那么\(1\)的个数就要变化了然后这个容斥原理是我无法理解的了,简单来说,就是先求每个\(a_i\)的子集,然后再......
  • hdu4336
    这道题目是很明显的无穷嵌套DP,准备写出一堆方程后化简,又看到数据范围想到了状态压缩设\(f[i]\)表示手上已经有了\(i\)的卡片,集齐所有卡片的期望这个时候我们不要去捣鼓一般性,而是选择直接手搓一个小范围数据,因为我们知道,一定是有规律的不妨令\(n=3\),于是有(以下的状态都是二进制......
  • hdu4135
    这一道题目主要是要帮助我们养成容斥的思维容斥主要是从集合的角度思考问题的,而且等式右边是奇加偶减,还是按照集合的大小从小到大依次考虑的我们这里显然转化成不互质的个数(肯定不能用欧拉函数),于是把\(N\)分解质因数,然后再按照容斥原理考虑先考虑集合大小为\(1\)的情况:即一个质......
  • HDU-Employment Planning题解
    题目在这里————————————————————————————————EmploymentPlanning简单的一道dp关键的点在于想到用枚举实现各种情况的讨论关键的注释写在代码里了还是很清晰的捏~#include<bits/stdc++.h>#definefo(x,y,z)for(int(x)=(y);(x)<=(z);(x......