CSES - UKIEPC 2016 - Results
Submission details
Task:Elegant Showroom
Sender:#dt-lapset
Submission time:2016-11-12 13:48:11 +0200
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.05 sdetails
#3ACCEPTED0.06 sdetails
#4ACCEPTED0.09 sdetails
#5ACCEPTED0.09 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.07 sdetails
#8ACCEPTED0.07 sdetails
#9ACCEPTED0.06 sdetails
#10ACCEPTED0.06 sdetails
#11ACCEPTED0.06 sdetails
#12ACCEPTED0.06 sdetails
#13ACCEPTED0.07 sdetails
#14ACCEPTED0.06 sdetails
#15ACCEPTED0.06 sdetails
#16ACCEPTED0.06 sdetails

Code

#include <bits/stdc++.h>
#define INF 999999999
#define F first
#define S second
using namespace std;

char c[444][444];
int d[444][444];
bool b[444][444];

int main () {
    int n, m;
    cin>>n>>m;
    for (int y = 1; y <= n; y++) {
        for (int x = 1 ; x <= m; x++) cin>>c[y][x];
    }
    for (int y = 0; y <= n + 1; y++) {
        for (int x = 0 ; x <= m + 1; x++) d[y][x] = INF;
    }
    int x, y;
    cin>>y>>x;
    priority_queue<pair<int, pair<int, int>>> q;
    q.push({0, {y, x}});
    d[y][x] = 0;
    while (!q.empty()) {
        int y = q.top().S.F;
        int x = q.top().S.S;
        int e = -q.top().F;
        q.pop();
        if (!y || !x || x == m + 1 || y == n + 1) continue;
        if (c[y][x] == '#') continue;
        if (b[y][x]) continue;
        b[y][x] = 1;
        if (d[y][x + 1] > e + (c[y][x + 1] == 'c')) d[y][x + 1] = e + (c[y][x + 1] == 'c'), q.push({-e + -(c[y][x + 1] == 'c'), {y, x + 1}});
        if (d[y][x - 1] > e + (c[y][x - 1] == 'c')) d[y][x - 1] = e + (c[y][x - 1] == 'c'), q.push({-e + -(c[y][x - 1] == 'c'), {y, x - 1}});
        if (d[y + 1][x] > e + (c[y + 1][x] == 'c')) d[y + 1][x] = e + (c[y + 1][x] == 'c'), q.push({-e + -(c[y + 1][x] == 'c'), {y + 1, x}});
        if (d[y - 1][x] > e + (c[y - 1][x] == 'c')) d[y - 1][x] = e + (c[y - 1][x] == 'c'), q.push({-e + -(c[y - 1][x] == 'c'), {y - 1, x}});
    }
    int ans = INF;
    for (int y = 1; y <= n; y++) {
        if (c[y][1] == 'D') ans = min(ans, d[y][1]);
        if (c[y][m] == 'D') ans = min(ans, d[y][m]);
    }
    for (int x = 1; x <= m; x++) {
        if (c[1][x] == 'D') ans = min(ans, d[1][x]);
        if (c[n][x] == 'D') ans = min(ans, d[n][x]);
    }
    
    cout<<ans + (c[y][x] == 'c')<<endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
20 20
DDDDDDDDDDD##DD#DD#D
DDccccc#c##c##cDccDD
Dc#c#c#cc#ccc#c#Dc#D
DccDc#Dc####ccc#c#DD
...

correct output
3

user output
3

Test 2

Verdict: ACCEPTED

input
20 20
####################
#cccccccccccccccccc#
#c################c#
#c#cccccccccccccc#c#
...

correct output
179

user output
179

Test 3

Verdict: ACCEPTED

input
20 20
####################
#cccccccccccccccccc#
#cccccccccccccccccc#
#cccccccccccccccccc#
...

correct output
35

user output
35

Test 4

Verdict: ACCEPTED

input
400 400
DDD##D#DD##DDDDDDDD#DDDD###DDD...

correct output
63

user output
63

Test 5

Verdict: ACCEPTED

input
400 400
#DDD###D#DD#DD#DD##DDD##D#DDD#...

correct output
11

user output
11

Test 6

Verdict: ACCEPTED

input
400 400
DDDDDDD#D#DDDD##D#DDDDDDD#DD##...

correct output
37

user output
37

Test 7

Verdict: ACCEPTED

input
400 400
#######D#DDD#D##DD####DDDDDD##...

correct output
55

user output
55

Test 8

Verdict: ACCEPTED

input
400 400
DD############################...

correct output
184

user output
184

Test 9

Verdict: ACCEPTED

input
20 20
DDDDD#DDDDDDDDD##D#D
DccccD#DccccDcDD#c#D
Dc###DD#c#ccDcccc#DD
DccDc##DccccDcccc#DD
...

correct output
4

user output
4

Test 10

Verdict: ACCEPTED

input
5 6
####D#
#DDDD#
#D##c#
#DDDc#
...

correct output
1

user output
1

Test 11

Verdict: ACCEPTED

input
20 20
DDDDDD#DDDDDD#D#D#D#
Dc#cccccccDcc#ccccDD
DDcD#c##cDcc####Dc#D
D#Dcccc#D##ccc#c#D#D
...

correct output
5

user output
5

Test 12

Verdict: ACCEPTED

input
20 20
DDD#DDDD#DDDD#DDDD#D
Dc##DDccDccD#DDcDDDD
DcDDccc#cc#ccc##D##D
DcccD#cDc##Dcccc##D#
...

correct output
3

user output
3

Test 13

Verdict: ACCEPTED

input
20 20
#D###DD##DDDDDD###DD
DDcDDccccDccDccDcc#D
DcD##ccc#cDcDccccDD#
DDcccc#Dc####c##ccDD
...

correct output
7

user output
7

Test 14

Verdict: ACCEPTED

input
6 7
#######
#ccc#cD
#c#c#c#
#c#c#c#
...

correct output
14

user output
14

Test 15

Verdict: ACCEPTED

input
5 5
DDDDD
DDDDD
DDcDD
DDDDD
...

correct output
1

user output
1

Test 16

Verdict: ACCEPTED

input
3 3
###
#cD
###
2 2

correct output
1

user output
1