forked from wisdompeak/LeetCode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path391.Perfect-Rectangle.cpp
71 lines (61 loc) · 2.04 KB
/
391.Perfect-Rectangle.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class Solution {
static bool cmp(pair<int,int>a, pair<int,int>b)
{
if (a.first==b.first)
return a.second<b.second;
else
return a.first<b.first;
}
public:
bool isRectangleCover(vector<vector<int>>& rectangles)
{
long long area=0;
unordered_set<string>Set;
for (int i=0; i<rectangles.size(); i++)
{
string str;
str=to_string(rectangles[i][0]);
str+=",";
str+=to_string(rectangles[i][1]);
if (Set.find(str)==Set.end())
Set.insert(str);
else
Set.erase(str);
str=to_string(rectangles[i][0]);
str+=",";
str+=to_string(rectangles[i][3]);
if (Set.find(str)==Set.end())
Set.insert(str);
else
Set.erase(str);
str=to_string(rectangles[i][2]);
str+=",";
str+=to_string(rectangles[i][1]);
if (Set.find(str)==Set.end())
Set.insert(str);
else
Set.erase(str);
str=to_string(rectangles[i][2]);
str+=",";
str+=to_string(rectangles[i][3]);
if (Set.find(str)==Set.end())
Set.insert(str);
else
Set.erase(str);
area+= (long long)(rectangles[i][3]-rectangles[i][1])*(long long)(rectangles[i][2]-rectangles[i][0]);
}
if (Set.size()!=4) return false;
vector<pair<int,int>>points;
for (auto a:Set)
{
int i=0;
while (a[i]!=',') i++;
int x = stoi(a.substr(0,i));
int y = stoi(a.substr(i+1));
points.push_back({x,y});
}
sort(points.begin(),points.end(),cmp);
long long A=(long long)(points[3].second-points[0].second)*(long long)(points[3].first-points[0].first);
return (A==area);
}
};