Submission details
Task:Mission
Sender:🐟FishyGoldenBeetroot
Submission time:2015-10-07 17:37:05 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.06 sdetails
#3ACCEPTED0.06 sdetails
#4ACCEPTED0.07 sdetails
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.05 sdetails
#8ACCEPTED0.05 sdetails
#9ACCEPTED0.05 sdetails
#10ACCEPTED0.06 sdetails
#11ACCEPTED0.05 sdetails
#12ACCEPTED0.07 sdetails
#13ACCEPTED0.05 sdetails
#14ACCEPTED0.06 sdetails
#15ACCEPTED0.05 sdetails
#16ACCEPTED0.06 sdetails
#17ACCEPTED0.06 sdetails
#18ACCEPTED0.07 sdetails
#19ACCEPTED0.05 sdetails
#20ACCEPTED0.06 sdetails
#21ACCEPTED0.05 sdetails
#22ACCEPTED0.07 sdetails
#23ACCEPTED0.05 sdetails
#24ACCEPTED0.06 sdetails
#25ACCEPTED0.06 sdetails

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