| 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 |
