Skip to content

Commit 84964b1

Browse files
committed
Weekly Contest 134
1 parent 23d1b06 commit 84964b1

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed

coloring-a-border.cc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Coloring A Border
2+
class Solution {
3+
public:
4+
vector<vector<int>> colorBorder(vector<vector<int>>& a, int r, int c, int color) {
5+
int n = a.size(), m = a[0].size(), aa = a[r][c];
6+
vector<vector<char>> v(n, vector<char>(m));
7+
vector<pair<int,int>> q;
8+
q.emplace_back(r, c);
9+
v[r][c] = 1;
10+
for (int i = 0; i < q.size(); i++) {
11+
tie(r, c) = q[i];
12+
if (r && a[r-1][c] == aa && !v[r-1][c]++) q.emplace_back(r-1,c);
13+
if (r+1<n && a[r+1][c] == aa && !v[r+1][c]++) q.emplace_back(r+1,c);
14+
if (c && a[r][c-1] == aa && !v[r][c-1]++) q.emplace_back(r,c-1);
15+
if (c+1<m && a[r][c+1] == aa && !v[r][c+1]++) q.emplace_back(r,c+1);
16+
}
17+
for (auto &x: q) {
18+
tie(r, c) = x;
19+
if (!r || !v[r-1][c] || r+1==n || !v[r+1][c] ||
20+
!c || !v[r][c-1] || c+1==m || !v[r][c+1])
21+
a[r][c] = color;
22+
}
23+
return a;
24+
}
25+
};

escape-a-large-maze.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Escape a Large Maze
2+
class Solution {
3+
public:
4+
bool isEscapePossible(vector<vector<int>>& bs, vector<int>& src, vector<int>& dst) {
5+
const long N = 1000001;
6+
unordered_set<long> v;
7+
for (auto &b: bs)
8+
v.insert(b[0]*N+b[1]);
9+
vector<pair<int,int>> q{{src[0], src[1]}};
10+
v.insert(src[0]*N+src[1]);
11+
for (int i=0; i<q.size(); i++) {
12+
int x, y;
13+
tie(x, y) = q[i];
14+
if (i == 200*200 || x == dst[0] && y == dst[1]) return true;
15+
if (x && v.insert((x-1)*N+y).second) q.emplace_back(x-1, y);
16+
if (x+1<N-1 && v.insert((x+1)*N+y).second) q.emplace_back(x+1, y);
17+
if (y && v.insert(x*N+y-1).second) q.emplace_back(x, y-1);
18+
if (y+1<N-1 && v.insert(x*N+y+1).second) q.emplace_back(x, y+1);
19+
}
20+
return false;
21+
}
22+
};

moving-stones-until-consecutive.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Moving Stones Until Consecutive
2+
class Solution {
3+
public:
4+
vector<int> numMovesStones(int a, int b, int c) {
5+
if (a>b) swap(a,b);
6+
if (b>c) swap(b,c);
7+
if (a>b) swap(a,b);
8+
vector<int> r;
9+
r.push_back(a+1==b&&b+1==c ? 0 : a+2>=b||b+2>=c ? 1 : 2);
10+
r.push_back(c-a-2);
11+
return r;
12+
}
13+
};

uncrossed-lines.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Uncrossed Lines
2+
#define FOR(i, a, b) for (remove_cv<remove_reference<decltype(b)>::type>::type i = (a); i < (b); i++)
3+
#define REP(i, n) FOR(i, 0, n)
4+
#define ROF(i, a, b) for (remove_cv<remove_reference<decltype(b)>::type>::type i = (b); --i >= (a); )
5+
6+
class Solution {
7+
public:
8+
int maxUncrossedLines(vector<int>& A, vector<int>& B) {
9+
int n = A.size(), m = B.size();
10+
vector<vector<int>> s(n+1, vector<int>(m+1));
11+
REP(i, n)
12+
REP(j, m) {
13+
int ss = 0;
14+
REP(k, j+1)
15+
if (A[i]==B[k])
16+
ss = max(ss, s[i][k]+1);
17+
REP(k, i+1)
18+
if (A[k]==B[j])
19+
ss = max(ss, s[k][j]+1);
20+
s[i+1][j+1] = max(s[i+1][j],max(s[i][j+1],ss));
21+
}
22+
return s[n][m];
23+
}
24+
};

0 commit comments

Comments
 (0)