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

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:68:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j=0;j<s.size();j++) {
                 ^

Code

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

#define F first
#define S second

using namespace std;

int n,m,k;
int coi[8],coj[8];
int a[102][102];
int v[102][102];
int cod[8][8];
int dist[102][102];
vector<pair<int,int>> z;
int si,sj;
int ti,tj;
int sdist[8];
int tdist[8];
int per[8];

void clea() {
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=m;j++) {
			v[i][j]=0;
		}
	}
	z.clear();
}

int visit(int ii,int jj) {
//	cout << ii << " " << jj << "\n";
	if (v[ii][jj] || !a[ii][jj]) return 0;
//	cout << ii << " " << jj << "\n";
	return 1;
}

void put(int ii, int jj, int hlp) {
//	cout << ii << " " << jj << "\n";
	v[ii][jj] = 1;
	dist[ii][jj] = hlp+1;
//	cout << dist[ii][jj] << "\n";
//	cout << "--" << endl;
	z.push_back(make_pair(ii, jj));
}

void bfs(int i, int j) {
//	cout << "MOI\n";
	v[i][j] = 1;
	dist[i][j] = 0;
	z.push_back(make_pair(i,j));
	for (unsigned int lol= 0; lol < z.size(); lol++) {
//		cout << "MOI2\n";
		if (visit(z[lol].F+1,z[lol].S)) put(z[lol].F+1,z[lol].S,dist[z[lol].F][z[lol].S]);
		if (visit(z[lol].F,z[lol].S-1)) put(z[lol].F,z[lol].S-1,dist[z[lol].F][z[lol].S]);
		if (visit(z[lol].F,z[lol].S+1)) put(z[lol].F,z[lol].S+1,dist[z[lol].F][z[lol].S]);
		if (visit(z[lol].F-1,z[lol].S)) put(z[lol].F-1,z[lol].S,dist[z[lol].F][z[lol].S]);
	}
}

int main() {
	cin >> n >> m >> k;
	int ind =0;
	for (int i=1;i<=n;i++) {
		string s;
		cin >> s;
		for (int j=0;j<s.size();j++) {
			if (s[j]!= '#') a[i][j+1]=1;
			if (s[j]== '*') {
				coi[ind]=i;
				coj[ind]=j+1;
				ind++;
			}
			if (s[j] == 'A') {
				si=i;
				sj=j+1;
			}
			if (s[j] == 'B') {
				ti=i;
				tj=j+1;
			}
		}
	}
	bfs(si,sj);
	for (int i=0;i<k;i++) sdist[i]=dist[coi[i]][coj[i]];
	for (int i=0;i<k;i++) {
		clea();
		bfs(coi[i],coj[i]);
		for (int j=0;j<k;j++) {
			cod[i][j]=dist[coi[j]][coj[j]];
		}
	}
	clea();
	bfs(ti,tj);
	for (int i=0;i<k;i++) tdist[i] = dist[coi[i]][coj[i]];
	for (int i=0;i<k;i++) per[i] = i;
	int parsa = 1e9;
//	for (int i=0;i<k;i++) cout << sdist[i] << "\n";
	do {
		int res=sdist[per[0]];
		for (int i=1;i<k;i++) res += cod[per[i-1]][per[i]];
		res += tdist[per[k-1]];
		if (res < parsa) parsa = res;
	} while (next_permutation(per,per+k));
	cout << parsa << "\n";
}

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:

input
100 100 0
##############################...

correct output
30

user output
0

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:

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

correct output
4

user output
0

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