Task: | Mission |
Sender: | OOliOO_slayer |
Submission time: | 2015-10-07 18:13:02 +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.06 s | details |
#4 | ACCEPTED | 0.06 s | details |
#5 | ACCEPTED | 0.05 s | details |
#6 | ACCEPTED | 0.05 s | details |
#7 | ACCEPTED | 0.06 s | details |
#8 | ACCEPTED | 0.05 s | details |
#9 | ACCEPTED | 0.05 s | details |
#10 | ACCEPTED | 0.06 s | details |
#11 | ACCEPTED | 0.05 s | details |
#12 | ACCEPTED | 0.05 s | details |
#13 | ACCEPTED | 0.06 s | details |
#14 | ACCEPTED | 0.06 s | details |
#15 | ACCEPTED | 0.05 s | details |
#16 | ACCEPTED | 0.06 s | details |
#17 | ACCEPTED | 0.05 s | details |
#18 | ACCEPTED | 0.06 s | details |
#19 | ACCEPTED | 0.05 s | details |
#20 | ACCEPTED | 0.05 s | details |
#21 | ACCEPTED | 0.06 s | details |
#22 | ACCEPTED | 0.06 s | details |
#23 | ACCEPTED | 0.05 s | details |
#24 | ACCEPTED | 0.05 s | details |
#25 | ACCEPTED | 0.06 s | details |
Compiler report
input/code.cpp: In function 'int main()': input/code.cpp:77:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int j = 0; j < line.size(); j++){ ^
Code
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <map> #include <utility> #include <set> #include <deque> typedef long long LL; using namespace std; LL n,m,k; class Node{ public: int r,c,dist; Node(int r, int c, int dist){ this->r = r; this->c = c; this->dist = dist; } }; bool free(int r, int c, vector<vector<char> >& grid){ return grid[r][c] != '#'; } void bfs(int r, int c, int start, vector<vector<char> >& grid, vector<vector<int> >& D){ deque<Node> Q; vector<vector<char> > visited(n, vector<char>(m)); Q.push_back(Node(r,c,0)); while(!Q.empty()){ auto v = Q.front(); Q.pop_front(); r = v.r; c = v.c; if(visited[r][c]) continue; visited.at(r).at(c) = 1; char symbol = grid[r][c]; if(symbol >= '0' && symbol <= '9'){ D[start][symbol-'0'] = v.dist; D[symbol-'0'][start] = v.dist; } if(r > 0 && free(r-1, c, grid)){ Node u(r-1,c,v.dist+1); Q.push_back(u); } if(r < n-1 && free(r+1, c, grid)) { Node u(r+1,c,v.dist+1); Q.push_back(u); } if(c > 0 && free(r, c-1, grid)){ Node u(r,c-1,v.dist+1); Q.push_back(u); } if(c < m-1 && free(r, c+1, grid)){ Node u(r,c+1,v.dist+1); Q.push_back(u); } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> k; vector<vector<char> > grid(n, vector<char>(m)); map<int,pair<int,int> > special; int coin_counter = 1; for(int i = 0; i < n; i++){ string line; cin >> line; for(int j = 0; j < line.size(); j++){ grid[i][j] = line[j]; if(line[j] == '*'){ grid[i][j] = '0' + coin_counter; special[coin_counter] = {i,j}; coin_counter++; } else if(line[j] == 'A'){ special[0] = {i,j}; grid[i][j] = '0'; } else if(line[j] == 'B'){ special[k+1] = {i,j}; grid[i][j] = '0' + k + 1; } } //for(auto c : grid[i]) cout << c; cout << endl; } vector<vector<int> > D(k+2, vector<int>(k+2)); for(auto keyvalue : special){ int id = keyvalue.first; int r = keyvalue.second.first; int c = keyvalue.second.second; bfs(r, c, id, grid, D); } if(k == 0){ cout << D[0][k+1] << endl; return 0; } /* for(int i = 0; i < k+2; i++){ for(int j = 0; j < k+2; j++){ cout << D[i][j] << " "; } cout << endl; } */ vector<int> permutation; for(int i = 1; i <= k; i++){ permutation.push_back(i); } LL ans = 1e9; do { LL score = 0; for(int i = 0; i < k-1; i++){ score += D[permutation[i]][permutation[i+1]]; } score += D[0][permutation[0]]; score += D[permutation.back()][k+1]; ans = min(ans,score); } while (next_permutation(permutation.begin(), permutation.end()) ); cout << ans << endl; }
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 |