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

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:100:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      for(int i = 1; i < ccc.size(); i++){
                       ^

Code

#include <bits/stdc++.h>

#define i64 long long
#define u64 unsigned long long
#define i32 int
#define u32 unsigned int

#define pii pair<int, int>
#define pll pair<long long, long long>

#define defmod 1000000007
using namespace std;


int main(){
	cin.sync_with_stdio(0);
	cin.tie(0);
	int n, m, k;
	cin >> n >> m >> k;
	string t[101];
	vector<pii> coins;
	pii sta, end;
	unordered_map<int, unordered_map<int, int> > id; 
	vector<int> ccc;
	for(int i = 0; i < n; i++){
		cin >> t[i];
		for(int j = 0; j < m; j++){
			if(t[i][j] == '*'){
				coins.push_back({i, j});
				id[i][j] = coins.size();
				ccc.push_back(id[i][j]);
			}
			if(t[i][j] == 'A'){
				sta = {i, j};

			}
			if(t[i][j] == 'B'){
				end = {i, j};
			}
		}
	}
	int ids, ide;
	coins.push_back(sta);
	id[sta.first][sta.second] = coins.size();
	ids = coins.size();
	coins.push_back(end);
	id[end.first][end.second] = coins.size();
	ide = coins.size();
	i64 dist[101][101] = {0};
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			if(t[i][j] == '#' || t[i][j] == '.')
				continue;
			bool d[101][101] = {0};
			queue<pair<pii, i64> > q;
			q.push({{i, j}, 0});
			while(!q.empty()){
				int ci = q.front().first.first;
				int cj = q.front().first.second;
				i64 di = q.front().second;
				q.pop();
				if(ci >= n || ci < 0 || cj < 0 || cj >= m)
					continue;
				if(d[ci][cj])
					continue;
				if(t[ci][cj] == '#')
					continue;
				
				d[ci][cj] = true;
				dist[id[i][j]][id[ci][cj]] = di;
				q.push({{ci+1, cj}, di+1});
				q.push({{ci-1, cj}, di+1});
				q.push({{ci, cj+1}, di+1});
				q.push({{ci, cj-1}, di+1});

			}
			for(int ii = 0; ii < n; ii++){
				for(int jj = 0; jj < m; jj++){
					if(d[ii][jj] == 0)
						dist[id[i][j]][id[ii][jj]] = 99999999;
				}
			}
		}
	}
	coins.pop_back();
	coins.pop_back();
	if(k == 0){
		cout << dist[ids][ide] << endl;
		return 0;
	}
	if(k == 1){
		cout << dist[ids][1] + dist[1][ide] << endl;
	}
	i64 re = 999999999999LL;
	do {
    	i64 cu = 0;
    	cu+=dist[ids][ccc[0]];
    	//cout << "jarjestys: " << endl;
    	//cout << ids << "->" << ccc[0] << " : " << dist[ids][ccc[0]] << endl;
    	for(int i = 1; i < ccc.size(); i++){
    		cu+=dist[ccc[i-1]][ccc[i]];
    		//cout << ccc[i-1] << "->" << ccc[i] << " : " << dist[ccc[i-1]][ccc[i-1]] << endl;
    	}
    	//cout << ccc[ccc.size()-1] << "->" << ide << " : " << dist[ccc[ccc.size()-1]][ide] << endl;
    	cu+=dist[ccc[ccc.size()-1]][ide];
    	re = min(re, cu);
  	} while ( std::next_permutation(ccc.begin(), ccc.end()) );
  	cout << re << endl;
	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:

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

correct output
48

user output
48
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