| Task: | Mission |
| Sender: | Team Purkka |
| Submission time: | 2015-10-07 18:37:21 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.10 s | details |
| #3 | ACCEPTED | 0.05 s | details |
| #4 | ACCEPTED | 0.10 s | details |
| #5 | ACCEPTED | 0.05 s | details |
| #6 | ACCEPTED | 0.09 s | details |
| #7 | ACCEPTED | 0.05 s | details |
| #8 | ACCEPTED | 0.09 s | details |
| #9 | ACCEPTED | 0.06 s | details |
| #10 | ACCEPTED | 0.05 s | details |
| #11 | ACCEPTED | 0.05 s | details |
| #12 | ACCEPTED | 0.10 s | details |
| #13 | ACCEPTED | 0.05 s | details |
| #14 | ACCEPTED | 0.10 s | details |
| #15 | ACCEPTED | 0.05 s | details |
| #16 | ACCEPTED | 0.10 s | details |
| #17 | ACCEPTED | 0.04 s | details |
| #18 | ACCEPTED | 0.10 s | details |
| #19 | ACCEPTED | 0.05 s | details |
| #20 | ACCEPTED | 0.10 s | details |
| #21 | ACCEPTED | 0.05 s | details |
| #22 | ACCEPTED | 0.10 s | details |
| #23 | ACCEPTED | 0.05 s | details |
| #24 | ACCEPTED | 0.10 s | details |
| #25 | ACCEPTED | 0.06 s | details |
Code
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
int ans = 999999999;
int n, m, k;
int ay, ax, by, bx;
char c[101][101];
vector<pair<int, int>> koliket;
int lol[9][101][101];
bool b[] = {false, false, false, false, false, false, false, false, false};
// O(k)
inline void brute (const int x, const int y, vector<pair<int, int>> v, const int sum, int keratty) {
//cout<<x<<" "<<y<<endl;
if (count(v.begin(), v.end(), make_pair(x, y))) {
//cout<<"return koska miksi ei"<<endl;
//cout<<"==========="<<endl;
return;
}
v.push_back(make_pair(x, y));
queue<pair<int, int>> q;
int index = 8;
if (!(x == ax && y == ay)) {
for (int i = 0; i < k; i++) {
if (koliket[i] == make_pair(x, y)) {index = i; break;}
}
}
//cout<<"index "<<index<<" "<<v.size()<<endl;
if (!b[index]) {
for (int y = 0; y < n; y++) {
for (int x = 0; x < m; x++) lol[index][y][x] = 888888888;
}
lol[index][y][x] = 0;
q.push(make_pair(x, y));
b[index] = true;
}
while (!q.empty()) {
pair<int, int> p = q.front();
q.pop();
int tx = p.first;
int ty = p.second;
if (ty > 0) {
if (c[ty - 1][tx] != '#' && lol[index][ty - 1][tx] - 1 > lol[index][ty][tx]) {
lol[index][ty - 1][tx] = lol[index][ty][tx] + 1;
q.push(make_pair(tx, ty - 1));
}
}
if (tx > 0) {
if (c[ty][tx - 1] != '#' && lol[index][ty][tx-1] - 1 > lol[index][ty][tx]) {
lol[index][ty][tx-1] = lol[index][ty][tx] + 1;
q.push(make_pair(tx-1, ty));
}
}
if (ty < n - 1) {
if (c[ty + 1][tx] != '#' && lol[index][ty + 1][tx] - 1 > lol[index][ty][tx]) {
lol[index][ty + 1][tx] = lol[index][ty][tx] + 1;
q.push(make_pair(tx, ty + 1));
}
}
if (tx < m - 1) {
if (c[ty][tx + 1] != '#' && lol[index][ty][tx + 1] - 1 > lol[index][ty][tx]) {
lol[index][ty][tx + 1] = lol[index][ty][tx] + 1;
q.push(make_pair(tx + 1, ty));
}
}
}
/*for (int y = 0; y < n; y++) {
for (int x = 0; x < m; x++) {
cout<<lol[index][y][x]<<" ";
}
cout<<endl;
}*/
//cout<<"==========="<<endl;
if (keratty == k) {
ans = min(ans, sum + lol[index][by][bx]);
return;
} else {
for (pair<int, int> p : koliket) {
brute(p.first, p.second, v, sum + lol[index][p.second][p.first], keratty + 1);
}
}
}
int main()
{
cin.sync_with_stdio(false);
cin>>n>>m>>k;
for (int y = 0; y < n; y++) {
for (int x = 0; x < m;x++) {
cin>>c[y][x];
if (c[y][x] == 'A') {
ay = y;
ax = x;
c[y][x] = '.';
} else if (c[y][x] == 'B') {
by = y;
bx = x;
c[y][x] = '.';
} else if (c[y][x] == '*') {
koliket.push_back(make_pair(x, y));
}
}
}
vector<pair<int, int>> v;
brute(ax, ay, v, 0, 0);
cout<<ans<<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: 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 |
