# 完美矩形

<p>我们有 N 个与坐标轴对齐的矩形, 其中 N &gt; 0, 判断它们是否能精确地覆盖一个矩形区域。</p>

<p>每个矩形用左下角的点和右上角的点的坐标来表示。例如，&nbsp;一个单位正方形可以表示为 [1,1,2,2]。&nbsp;( 左下角的点的坐标为 (1, 1) 以及右上角的点的坐标为 (2, 2) )。</p>

<p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/10/22/rectangle_perfect.gif"></p>

<p><strong>示例 1:</strong></p>

<pre>rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [3,2,4,4],
  [1,3,2,4],
  [2,3,3,4]
]

返回 true。5个矩形一起可以精确地覆盖一个矩形区域。
</pre>

<p>&nbsp;</p>

<p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/10/22/rectangle_separated.gif"></p>

<p><strong>示例&nbsp;2:</strong></p>

<pre>rectangles = [
  [1,1,2,3],
  [1,3,2,4],
  [3,1,4,2],
  [3,2,4,4]
]

返回 false。两个矩形之间有间隔，无法覆盖成一个矩形。
</pre>

<p>&nbsp;</p>

<p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/10/22/rectangle_hole.gif"></p>

<p><strong>示例 3:</strong></p>

<pre>rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [1,3,2,4],
  [3,2,4,4]
]

返回 false。图形顶端留有间隔，无法覆盖成一个矩形。
</pre>

<p>&nbsp;</p>

<p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/10/22/rectangle_intersect.gif"></p>

<p><strong>示例 4:</strong></p>

<pre>rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [1,3,2,4],
  [2,2,4,4]
]

返回 false。因为中间有相交区域，虽然形成了矩形，但不是精确覆盖。
</pre>


## template

```cpp
#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    bool isRectangleCover(vector<vector<int>> &ret)
    {
        set<pair<int, int>> s;
        int x1 = INT_MAX, y1 = INT_MAX, x2 = INT_MIN, y2 = INT_MIN, area = 0;
        for (int i = 0; i < ret.size(); ++i)
        {
            x1 = min(ret[i][0], x1);
            x2 = max(ret[i][2], x2);
            y1 = min(ret[i][1], y1);
            y2 = max(ret[i][3], y2);
            area += (ret[i][2] - ret[i][0]) * (ret[i][3] - ret[i][1]);

            if (s.find({ret[i][0], ret[i][1]}) == s.end())
                s.insert({ret[i][0], ret[i][1]});
            else
                s.erase({ret[i][0], ret[i][1]});

            if (s.find({ret[i][2], ret[i][3]}) == s.end())
                s.insert({ret[i][2], ret[i][3]});
            else
                s.erase({ret[i][2], ret[i][3]});

            if (s.find({ret[i][0], ret[i][3]}) == s.end())
                s.insert({ret[i][0], ret[i][3]});
            else
                s.erase({ret[i][0], ret[i][3]});

            if (s.find({ret[i][2], ret[i][1]}) == s.end())
                s.insert({ret[i][2], ret[i][1]});
            else
                s.erase({ret[i][2], ret[i][1]});
        }

        if (s.size() != 4 || !s.count({x1, y1}) || !s.count({x1, y2}) || !s.count({x2, y1}) || !s.count({x2, y2}))
            return false;
        return area == (x2 - x1) * (y2 - y1);
    }
};


```

## 答案

```cpp

```

## 选项

### A

```cpp

```

### B

```cpp

```

### C

```cpp

```