zoukankan      html  css  js  c++  java
  • 蓝桥杯_基础训练_矩阵面积交

    基础练习 矩形面积交  
     
    时间限制:1.0s   内存限制:512.0MB
     
    问题描述
      平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
    输入格式
      输入仅包含两行,每行描述一个矩形。
      在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
    输出格式
      输出仅包含一个实数,为交的面积,保留到小数后两位。
    样例输入
    1 1 3 3
    2 2 4 4
    样例输出
    1.00
     
    题解:
    由于不知道输入的对角线是主对角线还是副对角线。
    要先把每个矩形的坐标转换成副对角线:把每个矩形的横坐标和纵坐标进行排序。这是为什么呢?
    看图:

    (1,3)(3,1)转换成(1,1)(3,3)对应的矩形相同。

    然后判断它们是否相离。看图:

    如果x1<=x2||x0>=x3||y1<=y2||y0>=y3则相离。

    然后再把所有的横坐标和纵坐标排序。

    则相交面积是:(x2-x1)*(y2-y1)。

    AC代码:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
        double x[4];
        double y[4];
        cin>>x[0]>>y[0]>>x[1]>>y[1];
        cin>>x[2]>>y[2]>>x[3]>>y[3];
        sort(x,x+2);
        sort(x+2,x+4);
        sort(y,y+2);
        sort(y+2,y+4);
        if(x[0]>=x[3]||x[1]<=x[2]||y[0]>=y[3]||y[1]<=y[2])
        {
            printf("%.2lf
    ",0);
        }
        else
        {
            sort(x,x+4);
            sort(y,y+4);
            double res=(x[2]-x[1])*(y[2]-y[1]);
            printf("%.2lf
    ",res);
        }
    
        return 0;
    }
    

      

     
    人生如修仙,岂是一日间。何时登临顶,上善若水前。
  • 相关阅读:
    转:C#操作摄像头
    C# Memcached缓存
    WCF:调用方未由服务器进行身份验证
    SQL Server 存储过程进行分页查询
    SQL Server T-SQL高级查询
    C#设计模式总结(转)
    C#中构造函数和析构函数区别
    C#: static关键字的作用(转)
    C#结构体和类的区别(转)
    .NET多线程编程(转)
  • 原文地址:https://www.cnblogs.com/f-society/p/6724100.html
Copyright © 2011-2022 走看看