Skip to content

Commit 5bbb08c

Browse files
Create random_point_in_nonoverlapping_rect.cpp
1 parent 27ac160 commit 5bbb08c

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
vector<vector<int>> rect;
3+
vector<int> area;
4+
int n,tarea;
5+
public:
6+
Solution(vector<vector<int>>& rects) {
7+
n = rects.size();
8+
this->rect = rects;
9+
for(int i=0;i<n;i++){
10+
11+
int x1 = rects[i][0], x2 = rects[i][2];
12+
int y1 = rects[i][1], y2 = rects[i][3];
13+
int dx = x2-x1+1, dy = y2-y1+1;
14+
int a = abs(dx*dy);
15+
i==0?area.push_back(a):area.push_back(a+area[i-1]);
16+
}
17+
tarea = area[n-1];
18+
}
19+
20+
vector<int> pick(){
21+
int randArea = rand()%tarea;
22+
int idx = upper_bound(area.begin(),area.end(),randArea) - area.begin();
23+
int x1 = rect[idx][0], x2 = rect[idx][2];
24+
int y1 = rect[idx][1], y2 = rect[idx][3];
25+
int dx = x2-x1+1, dy = y2-y1+1;
26+
int X = x1 + rand()%dx;
27+
int Y = y1 + rand()%dy;
28+
return {X,Y};
29+
30+
}
31+
};

0 commit comments

Comments
 (0)