Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2cca6d1

Browse files
committed
Today ps
1 parent 5b319b3 commit 2cca6d1

File tree

5 files changed

+610
-0
lines changed

5 files changed

+610
-0
lines changed

‎Baekjoon/Cpp/13459.cpp‎

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
using pii = pair<int, int>;
5+
using pbpii = pair<bool, pii>;
6+
7+
int gph[11][11];
8+
9+
bool is_equal(pii a, pii b, pii c, pii d)
10+
{
11+
return a.first == b.first && a.second == b.second && c.first == d.first && c.second == d.second;
12+
}
13+
14+
pbpii up_down(pii tar, pii rck, bool isUp)
15+
{
16+
bool goal = false;
17+
int i = tar.first, pt = isUp ? -1 : 1;
18+
pii res;
19+
while (gph[i + pt][tar.second] != 1 && ((i + pt) != rck.first || tar.second != rck.second))
20+
{
21+
i += pt;
22+
if (gph[i][tar.second] == 2)
23+
{
24+
goal = true;
25+
break;
26+
}
27+
}
28+
if (gph[i + pt][tar.second] == 2)
29+
{
30+
goal = true;
31+
}
32+
res = make_pair(i, tar.second);
33+
return make_pair(goal, res);
34+
}
35+
36+
pbpii left_right(pii tar, pii rck, bool isLeft)
37+
{
38+
bool goal = false;
39+
int i = tar.second, pt = isLeft ? -1 : 1;
40+
pii res;
41+
while (gph[tar.first][i + pt] != 1 && (tar.first != rck.first || (i + pt) != rck.second))
42+
{
43+
i += pt;
44+
if (gph[tar.first][i] == 2)
45+
{
46+
goal = true;
47+
break;
48+
}
49+
}
50+
if (gph[tar.first][i + pt] == 2)
51+
{
52+
goal = true;
53+
}
54+
res = make_pair(tar.first, i);
55+
return make_pair(goal, res);
56+
}
57+
58+
int main()
59+
{
60+
ios::sync_with_stdio(0);
61+
cin.tie(0);
62+
int n, m, i, j;
63+
pii b, r;
64+
pbpii nb, nr;
65+
pair<int, pair<pii, pii>> cr;
66+
queue<pair<int, pair<pii, pii>>> que;
67+
bool res = false;
68+
char c;
69+
cin >> n >> m;
70+
for (i = 0; i < n; i++)
71+
{
72+
for (j = 0; j < m; j++)
73+
{
74+
cin >> c;
75+
if (c == '#')
76+
{
77+
gph[i][j] = 1;
78+
}
79+
else if (c == 'O')
80+
{
81+
gph[i][j] = 2;
82+
}
83+
else
84+
{
85+
gph[i][j] = 0;
86+
if (c == 'B')
87+
{
88+
b = make_pair(i, j);
89+
}
90+
else if (c == 'R')
91+
{
92+
r = make_pair(i, j);
93+
}
94+
}
95+
}
96+
}
97+
que.push(make_pair(0, make_pair(b, r)));
98+
while (!que.empty())
99+
{
100+
cr = que.front();
101+
b = cr.second.first;
102+
r = cr.second.second;
103+
que.pop();
104+
if (cr.first > 10)
105+
{
106+
break;
107+
}
108+
else if (gph[r.first][r.second] == 2)
109+
{
110+
res = true;
111+
break;
112+
}
113+
nr = up_down(r, b, r.first < b.first);
114+
nb = up_down(b, nr.second, r.first < b.first);
115+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
116+
{
117+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
118+
}
119+
nb = up_down(b, r, r.first >= b.first);
120+
nr = up_down(r, nb.second, r.first >= b.first);
121+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
122+
{
123+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
124+
}
125+
nr = left_right(r, b, r.second < b.second);
126+
nb = left_right(b, nr.second, r.second < b.second);
127+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
128+
{
129+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
130+
}
131+
nb = left_right(b, r, r.second >= b.second);
132+
nr = left_right(r, nb.second, r.second >= b.second);
133+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
134+
{
135+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
136+
}
137+
}
138+
cout << res;
139+
return 0;
140+
}

‎Baekjoon/Cpp/13460.cpp‎

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
using pii = pair<int, int>;
5+
using pbpii = pair<bool, pii>;
6+
7+
int gph[11][11];
8+
9+
bool is_equal(pii a, pii b, pii c, pii d)
10+
{
11+
return a.first == b.first && a.second == b.second && c.first == d.first && c.second == d.second;
12+
}
13+
14+
pbpii up_down(pii tar, pii rck, bool isUp)
15+
{
16+
bool goal = false;
17+
int i = tar.first, pt = isUp ? -1 : 1;
18+
pii res;
19+
while (gph[i + pt][tar.second] != 1 && ((i + pt) != rck.first || tar.second != rck.second))
20+
{
21+
i += pt;
22+
if (gph[i][tar.second] == 2)
23+
{
24+
goal = true;
25+
break;
26+
}
27+
}
28+
if (gph[i + pt][tar.second] == 2)
29+
{
30+
goal = true;
31+
}
32+
res = make_pair(i, tar.second);
33+
return make_pair(goal, res);
34+
}
35+
36+
pbpii left_right(pii tar, pii rck, bool isLeft)
37+
{
38+
bool goal = false;
39+
int i = tar.second, pt = isLeft ? -1 : 1;
40+
pii res;
41+
while (gph[tar.first][i + pt] != 1 && (tar.first != rck.first || (i + pt) != rck.second))
42+
{
43+
i += pt;
44+
if (gph[tar.first][i] == 2)
45+
{
46+
goal = true;
47+
break;
48+
}
49+
}
50+
if (gph[tar.first][i + pt] == 2)
51+
{
52+
goal = true;
53+
}
54+
res = make_pair(tar.first, i);
55+
return make_pair(goal, res);
56+
}
57+
58+
int main()
59+
{
60+
ios::sync_with_stdio(0);
61+
cin.tie(0);
62+
int n, m, i, j;
63+
pii b, r;
64+
pbpii nb, nr;
65+
pair<int, pair<pii, pii>> cr;
66+
queue<pair<int, pair<pii, pii>>> que;
67+
bool res = false;
68+
char c;
69+
cin >> n >> m;
70+
for (i = 0; i < n; i++)
71+
{
72+
for (j = 0; j < m; j++)
73+
{
74+
cin >> c;
75+
if (c == '#')
76+
{
77+
gph[i][j] = 1;
78+
}
79+
else if (c == 'O')
80+
{
81+
gph[i][j] = 2;
82+
}
83+
else
84+
{
85+
gph[i][j] = 0;
86+
if (c == 'B')
87+
{
88+
b = make_pair(i, j);
89+
}
90+
else if (c == 'R')
91+
{
92+
r = make_pair(i, j);
93+
}
94+
}
95+
}
96+
}
97+
que.push(make_pair(0, make_pair(b, r)));
98+
while (!que.empty())
99+
{
100+
cr = que.front();
101+
b = cr.second.first;
102+
r = cr.second.second;
103+
que.pop();
104+
if (cr.first > 10)
105+
{
106+
break;
107+
}
108+
else if (gph[r.first][r.second] == 2)
109+
{
110+
cout << cr.first;
111+
res = true;
112+
break;
113+
}
114+
nr = up_down(r, b, r.first < b.first);
115+
nb = up_down(b, nr.second, r.first < b.first);
116+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
117+
{
118+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
119+
}
120+
nb = up_down(b, r, r.first >= b.first);
121+
nr = up_down(r, nb.second, r.first >= b.first);
122+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
123+
{
124+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
125+
}
126+
nr = left_right(r, b, r.second < b.second);
127+
nb = left_right(b, nr.second, r.second < b.second);
128+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
129+
{
130+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
131+
}
132+
nb = left_right(b, r, r.second >= b.second);
133+
nr = left_right(r, nb.second, r.second >= b.second);
134+
if (!nb.first && !is_equal(r, nr.second, b, nb.second))
135+
{
136+
que.push(make_pair(cr.first + 1, make_pair(nb.second, nr.second)));
137+
}
138+
}
139+
if (!res)
140+
{
141+
cout << -1;
142+
}
143+
return 0;
144+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /