## 题目 2101: 矩阵面积相交



时间限制: 1Sec 内存限制: 128MB 提交: 20 解决: 9
提交地址：
https://www.dotcpp.com/oj/problem2101.html
**题目描述**

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210309152051577.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2OTc4NQ==,size_16,color_FFFFFF,t_70)





**输入**

输入包含多组测试数据，输入的第一行包含一个正整数 T，表示测试数据的组数。

接下来依次描述每组测试数据，对于每组测试数据:

第一行包含一个正整数 n，表示矩形的数量。
![img](https://img-blog.csdnimg.cn/20210309152111765.png)


**输出**

对于每组测试数据，输出 n 行，其中第 i 行包含两个非负整数，用恰好一个空格隔开，这里第 i 行的第一个整数表示与输入给出的第 i个矩形严格有交集的矩

形数量（不含第 i 个矩形），第二个整数表示这些矩形分别与第 i 个矩形的交集面积之和。


**数据范围:**

T <= 10 ， 所有坐标均为不超过 5000 的非负整数。

**样例输入**

```
2
2
0 0 1 1
1 1 2 2
3
0 0 2 6
1 1 4 4
1 3 3 9
```
**样例输出**

```

0 0
0 0
2 6
2 5
2 5
```


```
def Area_cross(target,matrixs,target_index):
    count=0
    cross=0
    for i in range(len(matrixs)):
        if i!=target_index:
            xr=min(target[2],matrixs[i][2])
            xl=max(target[0],matrixs[i][0])
            y_up=min(target[3],matrixs[i][3])
            y_down=max(target[1],matrixs[i][1])
            if xr>xl and y_up>y_down:
                cross+=(xr-xl)*(y_up-y_down)
                count+=1
    return (count,cross)
            
    
            
n=int(input())
for i in range(n):
    n=int(input())
    matrixs=[]
    for j in range(n):
        matrixs.append(list(map(int,input().strip().split())))
    for k in range(n):
        target=matrixs[k]
        count,cross=Area_cross(target,matrixs,k)
        print(count,cross)
        
```

    1
    3
    0 0 2 6
    1 1 4 4 
    1 3 3 9
    2 6
    2 5
    2 5




## 试题 基础练习 矩形面积交

提交此题   
资源限制
时间限制：1.0s   内存限制：512.0MB

问题描述

   平面上有两个矩形，它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形，我们给出它的一对相对顶点的坐标，请你编程算出两个矩形的交的面积。

输入格式

   输入仅包含两行，每行描述一个矩形。

　　在每行中，给出矩形的一对相对顶点的坐标，每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

　　输出仅包含一个实数，为交的面积，保留到小数后两位。

样例输入

```
1 1 3 3
2 2 4 4
```
样例输出

```
1.00
```

参考答案


```
x1i=list(map(float,input().split()))
x2i=list(map(float,input().split()))
x1=[min(x1i[0],x1i[2]),min(x1i[1],x1i[3]),max(x1i[0],x1i[2]),max(x1i[1],x1i[3])]
x2=[min(x2i[0],x2i[2]),min(x2i[1],x2i[3]),max(x2i[0],x2i[2]),max(x2i[1],x2i[3])]
xl=max(x1[0],x2[0])
xr=min(x1[2],x2[2])
yup=min(x1[3],x2[3])
ydown=max(x1[1],x2[1])
x=xr-xl
y=yup-ydown
if xr>xl and yup>ydown:
    print('{:.2f}'.format(x*y))
else:
    print('{:.2f}'.format(0))
```

    1 1 4 5
    1 1 4 5
    12.00
