Task: | Mission |
Sender: | 🐟FishyGoldenBeetroot |
Submission time: | 2015-10-07 17:37:05 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.06 s | details |
#2 | ACCEPTED | 0.06 s | details |
#3 | ACCEPTED | 0.06 s | details |
#4 | ACCEPTED | 0.07 s | details |
#5 | ACCEPTED | 0.06 s | details |
#6 | ACCEPTED | 0.06 s | details |
#7 | ACCEPTED | 0.05 s | details |
#8 | ACCEPTED | 0.05 s | details |
#9 | ACCEPTED | 0.05 s | details |
#10 | ACCEPTED | 0.06 s | details |
#11 | ACCEPTED | 0.05 s | details |
#12 | ACCEPTED | 0.07 s | details |
#13 | ACCEPTED | 0.05 s | details |
#14 | ACCEPTED | 0.06 s | details |
#15 | ACCEPTED | 0.05 s | details |
#16 | ACCEPTED | 0.06 s | details |
#17 | ACCEPTED | 0.06 s | details |
#18 | ACCEPTED | 0.07 s | details |
#19 | ACCEPTED | 0.05 s | details |
#20 | ACCEPTED | 0.06 s | details |
#21 | ACCEPTED | 0.05 s | details |
#22 | ACCEPTED | 0.07 s | details |
#23 | ACCEPTED | 0.05 s | details |
#24 | ACCEPTED | 0.06 s | details |
#25 | ACCEPTED | 0.06 s | details |
Compiler report
input/code.cpp: In function 'int main()': input/code.cpp:91:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i + 1 < p.size(); ++i) { ^
Code
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> ii; typedef pair<int, ii> pp; const int INF = 999999999; int distAC[100]; int distBC[100]; int distCC[100][100]; int ay, ax; int by, bx; int w, h, k; int cy[100], cx[100]; string m[110]; #define A first #define B second #define Y first #define X second int dist(int y1, int x1, int y2, int x2) { bool visited[101][101] = {0}; priority_queue<pp, std::vector<pp>, std::greater<pp>> q; q.push(pp(0, ii(y1, x1))); visited[y1][x1] = true; while(!q.empty()) { pp t = q.top(); ii p = t.B; q.pop(); //if(visited[p.Y][p.X]) continue; for(int oy = -1; oy <= 1; ++oy) { for(int ox = -1; ox <= 1; ++ox) { if(abs(oy) + abs(ox) != 1) continue; int yy = p.Y + oy; int xx = p.X + ox; if(yy < 0 || yy >= h || xx < 0 || xx >= w) continue; if(yy == y2 && xx == x2) return t.A + 1; if(m[yy][xx] == '#' || m[yy][xx] == 'B') continue; if(visited[yy][xx]) continue; visited[yy][xx] = true; q.push(pp(t.A + 1, ii(yy, xx))); } } } throw; } int main() { cin.tie(0); ios_base::sync_with_stdio(0); cin >> h >> w >> k; for(int y = 0; y < h; ++y) { cin >> m[y]; } int idx = 0; for(int y = 0; y < h; ++y) { for(int x = 0; x < w; ++x) { if(m[y][x] == 'A') { ay = y; ax = x; } if(m[y][x] == 'B') { by = y; bx = x; } if(m[y][x] == '*') { cy[idx] = y; cx[idx] = x; ++idx; } } } vector<int> p; for(int i = 0; i < k; ++i) { p.push_back(i); distAC[i] = dist(ay, ax, cy[i], cx[i]); distBC[i] = dist(by, bx, cy[i], cx[i]); for(int j = i + 1; j < k; ++j) { int d = dist(cy[i], cx[i], cy[j], cx[j]); distCC[i][j] = d; distCC[j][i] = d; } } if(p.empty()) { cout << dist(by, bx, ay, ax) << "\n"; return 0; } int best = INF; do { int ans = distAC[p.front()] + distBC[p.back()]; for(int i = 0; i + 1 < p.size(); ++i) { ans += distCC[p[i]][p[i + 1]]; } best = min(best, ans); } while(next_permutation(p.begin(), p.end())); if(best == INF) throw; cout << best << "\n"; return 0; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
84 87 2 ##############################... |
correct output |
---|
104 |
user output |
---|
104 |
Test 2
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
264 |
user output |
---|
264 |
Test 3
Verdict: ACCEPTED
input |
---|
26 51 1 ##############################... |
correct output |
---|
48 |
user output |
---|
48 |
Test 4
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
145 |
user output |
---|
145 |
Test 5
Verdict: ACCEPTED
input |
---|
68 50 7 ##############################... |
correct output |
---|
88 |
user output |
---|
88 |
Test 6
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
187 |
user output |
---|
187 |
Test 7
Verdict: ACCEPTED
input |
---|
61 79 6 ##############################... |
correct output |
---|
149 |
user output |
---|
149 |
Test 8
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
232 |
user output |
---|
232 |
Test 9
Verdict: ACCEPTED
input |
---|
94 27 6 ########################### ########################### ########################### #############.############# ... |
correct output |
---|
82 |
user output |
---|
82 |
Test 10
Verdict: ACCEPTED
input |
---|
100 100 0 ##############################... |
correct output |
---|
30 |
user output |
---|
30 |
Test 11
Verdict: ACCEPTED
input |
---|
65 100 6 ######.#######################... |
correct output |
---|
233 |
user output |
---|
233 |
Test 12
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
209 |
user output |
---|
209 |
Test 13
Verdict: ACCEPTED
input |
---|
75 18 3 ################## ################## ################## ################## ... |
correct output |
---|
72 |
user output |
---|
72 |
Test 14
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
196 |
user output |
---|
196 |
Test 15
Verdict: ACCEPTED
input |
---|
62 4 3 ###. #### #### #### ... |
correct output |
---|
44 |
user output |
---|
44 |
Test 16
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
231 |
user output |
---|
231 |
Test 17
Verdict: ACCEPTED
input |
---|
15 4 0 ###. .### #### #.#. ... |
correct output |
---|
4 |
user output |
---|
4 |
Test 18
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
300 |
user output |
---|
300 |
Test 19
Verdict: ACCEPTED
input |
---|
86 15 2 .########....## #########...... #########...... #########...... ... |
correct output |
---|
88 |
user output |
---|
88 |
Test 20
Verdict: ACCEPTED
input |
---|
100 100 8 ##############################... |
correct output |
---|
288 |
user output |
---|
288 |
Test 21
Verdict: ACCEPTED
input |
---|
51 90 3 ................................. |
correct output |
---|
103 |
user output |
---|
103 |
Test 22
Verdict: ACCEPTED
input |
---|
100 100 8 ................................. |
correct output |
---|
352 |
user output |
---|
352 |
Test 23
Verdict: ACCEPTED
input |
---|
22 91 4 ................................. |
correct output |
---|
128 |
user output |
---|
128 |
Test 24
Verdict: ACCEPTED
input |
---|
100 100 8 ................................. |
correct output |
---|
317 |
user output |
---|
317 |
Test 25
Verdict: ACCEPTED
input |
---|
49 42 6 ................................. |
correct output |
---|
175 |
user output |
---|
175 |