Skip to content

Commit 2b03dd1

Browse files
authored
Create 10496 - Collecting Beepers
1 parent a03a03e commit 2b03dd1

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
//#pragma GCC optimize("Ofast")
2+
//#pragma GCC target("avx,avx2,fma")
3+
4+
#include <bits/stdc++.h>
5+
6+
#define besmellah ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
7+
using namespace std;
8+
typedef long long ll;
9+
typedef long double ld;
10+
typedef unsigned long long ull;
11+
const ll INF = 1e9 + 7;
12+
13+
const int OO = 0x3f3f3f3f;
14+
const ll LOO = 0x3f3f3f3f3f3f3f3f;
15+
const ll MOD = 1e9 + 7;
16+
const ll N = 1e5;
17+
const double EPS = 1e-6;
18+
#define M_PI 3.14159265358979323846
19+
#define all(a) a.begin(),a.end()
20+
#define endl '\n'
21+
22+
int lg(int n) { return 31 - __builtin_clz(n); }
23+
24+
const int dx[] = {+0, +0, +1, -1, +1, -1, +1, -1};
25+
const int dy[] = {+1, -1, +0, +0, +1, -1, -1, +1};
26+
int knightDx[] = {+1, -1, +2, +2, -2, -2, +1, -1};
27+
int knightDy[] = {+2, +2, +1, -1, +1, -1, -2, -2};
28+
//#define int long long
29+
30+
vector<pair<int, int>> hoba;
31+
int n, m;
32+
int q;
33+
int st, en;
34+
35+
int solve(int i, int msk, vector<vector<int>> &dp, int prev) {
36+
if (msk == (1 << q) - 1)return abs(hoba[prev].first - st) + abs(hoba[prev].second - en);
37+
38+
int &ret = dp[prev][msk];
39+
if (~ret)return ret;
40+
int op1 = OO;
41+
ret = 0;
42+
for (int j = 0; j < hoba.size(); ++j) {
43+
if ((1 << j) & msk)continue;
44+
if (i == 0) {
45+
op1 = min(op1, solve(i + 1, msk | (1 << j), dp, j) + abs(hoba[j].first - st) +
46+
abs(hoba[j].second - en));
47+
} else
48+
op1 = min(op1, solve(i + 1, msk | (1 << j), dp, j) + abs(hoba[prev].first - hoba[j].first) +
49+
abs(hoba[prev].second - hoba[j].second));
50+
}
51+
return ret += op1;
52+
}
53+
54+
signed main() {
55+
besmellah
56+
//Sky is the limit ❤
57+
#ifdef CLION
58+
freopen("input.txt", "r", stdin);
59+
freopen("output.txt", "w", stdout);
60+
#else
61+
//freopen("", "r", stdin);
62+
#endif
63+
int T = 1;
64+
cin >> T;
65+
//remember data type long long or int
66+
while (T--) {
67+
cin >> n >> m;
68+
cin >> st >> en;
69+
cin >> q;
70+
vector<vector<int>> dp(q, vector<int>((1 << q) + 1, -1));
71+
hoba.resize(q);
72+
for (int i = 0; i < q; i++) {
73+
cin >> hoba[i].first;
74+
cin >> hoba[i].second;
75+
}
76+
cout << "The shortest path has length " << solve(0, 0, dp, NULL) << endl;
77+
}
78+
//remember data type long long or int
79+
80+
}

0 commit comments

Comments
 (0)