Task: | Mission |
Sender: | infosec |
Submission time: | 2015-10-07 18:27:15 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.05 s | details |
#2 | ACCEPTED | 0.06 s | details |
#3 | ACCEPTED | 0.05 s | details |
#4 | ACCEPTED | 0.06 s | details |
#5 | ACCEPTED | 0.05 s | details |
#6 | ACCEPTED | 0.05 s | details |
#7 | ACCEPTED | 0.04 s | details |
#8 | ACCEPTED | 0.06 s | details |
#9 | ACCEPTED | 0.06 s | details |
#10 | ACCEPTED | 0.06 s | details |
#11 | ACCEPTED | 0.06 s | details |
#12 | ACCEPTED | 0.06 s | details |
#13 | ACCEPTED | 0.06 s | details |
#14 | ACCEPTED | 0.05 s | details |
#15 | ACCEPTED | 0.06 s | details |
#16 | ACCEPTED | 0.07 s | details |
#17 | ACCEPTED | 0.05 s | details |
#18 | ACCEPTED | 0.06 s | details |
#19 | ACCEPTED | 0.06 s | details |
#20 | ACCEPTED | 0.06 s | details |
#21 | ACCEPTED | 0.05 s | details |
#22 | ACCEPTED | 0.06 s | details |
#23 | ACCEPTED | 0.05 s | details |
#24 | ACCEPTED | 0.06 s | details |
#25 | ACCEPTED | 0.05 s | details |
Code
#include <stdio.h> #include <string.h> #include <iostream> #include <fstream> #include <sstream> #include <queue> #include <algorithm> #include <vector> #include <set> #include <cstdlib> #include <stack> using namespace std; #define all(x) (x).begin(),x.end() #define ii pair<int, int> #define pb push_back #define mp make_pair #define fi first #define se second #define ll long long #define MAXN 101 #define INF 1000000007 int nR, nC, nCoin; int a[MAXN][MAXN]; vector<int> eList[20], cList[20]; int d[MAXN][MAXN]; bool mark[20]; int res, cur, exitNode; int dx[] = {0, -1, 0, 1}; int dy[] = {-1, 0, 1, 0}; void bfs(int si, int sj) { queue<ii> q; int i = a[si][sj]; q.push(ii(si, sj)); memset(d, -1, sizeof(d)); d[si][sj] = 0; while (!q.empty()) { ii top = q.front(); q.pop(); if (a[top.fi][top.se] > 0) { int j = a[top.fi][top.se]; eList[i].pb(j); cList[i].pb(d[top.fi][top.se]); } for (int k = 0; k < 4; k++) { int r = top.fi + dx[k]; int c = top.se + dy[k]; if (r < 0 || r >= nR || c < 0 || c >= nC || a[r][c] == -1) { continue; } if (d[r][c] == -1) { d[r][c] = d[top.fi][top.se] + 1; q.push(ii(r, c)); } } } } void dfs(int i) { if (i == exitNode) { bool found = false; for (int k = 2; k < exitNode; k++) { if (mark[k] == false) { found = true; break; } } if (!found && cur < res) { res = cur; } return; } for (int k = 0; k < (int)eList[i].size(); k++) { int j = eList[i][k]; if (mark[j]) { continue; } mark[j] = true; cur += cList[i][k]; dfs(j); mark[j] = false; cur -= cList[i][k]; } } int main() { memset(a, 0, sizeof(a)); cin >> nR >> nC >> nCoin; char tmp; int count = 2; exitNode = nCoin + 2; for (int i = 0; i < nR; i++) { for (int j = 0; j < nC; j++) { cin >> tmp; if (tmp == '#') { a[i][j] = -1; } else if (tmp == 'A') { a[i][j] = 1; } else if (tmp == '*') { a[i][j] = count; count++; } else if (tmp == 'B') { a[i][j] = exitNode; } } } for (int i = 0; i < nR; i++) { for (int j = 0; j < nC; j++) { if (a[i][j] > 0) { bfs(i, j); } } } res = INF; cur = 0; memset(mark, 0, sizeof(mark)); mark[1] = true; dfs(1); cout << res; 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 |