| 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 |
