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

Code

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

int ans = 999999999;
int n, m, k;
int ay, ax, by, bx;
char c[101][101];
vector<pair<int, int>> koliket;

// O(k)
inline void brute (const int x, const int y, vector<pair<int, int>> v, const int sum, int keratty) {
	//cout<<x<<" "<<y<<endl;
	if (count(v.begin(), v.end(), make_pair(x, y))) return;
	v.push_back(make_pair(x, y));
	
	queue<pair<int, int>> q;
	q.push(make_pair(x, y));
	
	int lol[n][m];
	for (int y = 0; y < n; y++) {
		for (int x = 0; x < m; x++) lol[y][x] = 888888888;
	}
	lol[y][x] = 0;
	
	while (!q.empty()) {
		pair<int, int> p = q.front();
		q.pop();
		int tx = p.first;
		int ty = p.second;
		
		if (ty > 0) {
			if (c[ty - 1][tx] != '#' && lol[ty - 1][tx] - 1 > lol[ty][tx]) {
				lol[ty - 1][tx] = lol[ty][tx] + 1;
				q.push(make_pair(tx, ty - 1));
			}
		}
		if (tx > 0) {
			if (c[ty][tx - 1] != '#' && lol[ty][tx-1] - 1 > lol[ty][tx]) {
				lol[ty][tx-1] = lol[ty][tx] + 1;
				q.push(make_pair(tx-1, ty));
			}
		}
		if (ty < n - 1) {
			if (c[ty + 1][tx] != '#' && lol[ty + 1][tx] - 1 > lol[ty][tx]) {
				lol[ty + 1][tx] = lol[ty][tx] + 1;
				q.push(make_pair(tx, ty + 1));
			}
		}
		if (tx < m - 1) {
			if (c[ty][tx + 1] != '#' && lol[ty][tx + 1] - 1 > lol[ty][tx]) {
				lol[ty][tx + 1] = lol[ty][tx] + 1;
				q.push(make_pair(tx + 1, ty));
			}
		}
	}
	/*for (int y = 0; y < n; y++) {
		for (int x = 0; x < m; x++) {
			cout<<lol[y][x]<<" ";
		}
		cout<<endl;
	}
	cout<<"==========="<<endl;*/
	
	if (keratty == k) {
		ans = min(ans, sum + lol[by][bx]);
		return;
	} else {
		for (pair<int, int> p : koliket) {
			brute(p.first, p.second, v, sum + lol[p.second][p.first], keratty + 1);
		}
	}
}

int main()
{
	cin.sync_with_stdio(false);	

	cin>>n>>m>>k;
	
	for (int y = 0; y < n; y++) {
		for (int x = 0; x < m;x++) {
			cin>>c[y][x];
			if (c[y][x] == 'A') {
				ay = y;
				ax = x;
				c[y][x] = '.';
			} else if (c[y][x] == 'B') {
				by = y;
				bx = x;
				c[y][x] = '.';
			} else if (c[y][x] == '*') {
				koliket.push_back(make_pair(x, y));
			}
		}
	}
	
	vector<pair<int, int>> v;
	brute(ax, ay, v, 0, 0);
	
	cout<<ans<<endl;
	
	return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
84 87 2
##############################...

correct output
104

user output
104

Test 2

Verdict:

input
100 100 8
##############################...

correct output
264

user output
(empty)

Test 3

Verdict: ACCEPTED

input
26 51 1
##############################...

correct output
48

user output
48

Test 4

Verdict:

input
100 100 8
##############################...

correct output
145

user output
(empty)

Test 5

Verdict: ACCEPTED

input
68 50 7
##############################...

correct output
88

user output
88

Test 6

Verdict:

input
100 100 8
##############################...

correct output
187

user output
(empty)

Test 7

Verdict: ACCEPTED

input
61 79 6
##############################...

correct output
149

user output
149

Test 8

Verdict:

input
100 100 8
##############################...

correct output
232

user output
(empty)

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:

input
100 100 8
##############################...

correct output
209

user output
(empty)

Test 13

Verdict: ACCEPTED

input
75 18 3
##################
##################
##################
##################
...

correct output
72

user output
72

Test 14

Verdict:

input
100 100 8
##############################...

correct output
196

user output
(empty)

Test 15

Verdict: ACCEPTED

input
62 4 3
###.
####
####
####
...

correct output
44

user output
44

Test 16

Verdict:

input
100 100 8
##############################...

correct output
231

user output
(empty)

Test 17

Verdict: ACCEPTED

input
15 4 0
###.
.###
####
#.#.
...

correct output
4

user output
4

Test 18

Verdict:

input
100 100 8
##############################...

correct output
300

user output
(empty)

Test 19

Verdict: ACCEPTED

input
86 15 2
.########....##
#########......
#########......
#########......
...

correct output
88

user output
88

Test 20

Verdict:

input
100 100 8
##############################...

correct output
288

user output
(empty)

Test 21

Verdict: ACCEPTED

input
51 90 3
.................................

correct output
103

user output
103

Test 22

Verdict:

input
100 100 8
.................................

correct output
352

user output
(empty)

Test 23

Verdict: ACCEPTED

input
22 91 4
.................................

correct output
128

user output
128

Test 24

Verdict:

input
100 100 8
.................................

correct output
317

user output
(empty)

Test 25

Verdict: ACCEPTED

input
49 42 6
.................................

correct output
175

user output
175