CSES - COCI 2006/2007 #6 - Results
Submission details
Task:Kamen
Sender:henrikaalto
Submission time:2019-07-26 16:00:40 +0300
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#10.01 sdetails
#20.01 sdetails
#30.01 sdetails
#40.01 sdetails
#50.01 sdetails
#60.01 sdetails
#70.04 sdetails
#80.06 sdetails
#90.08 sdetails
#100.10 sdetails

Code

#include<bits/stdc++.h>
using namespace std;
using ii=long long;
#define all(x) x.begin(), x.end()
#define F first
#define S second

char board[30100][35];

int tt[30100][35];

int n, m;
struct aaa {
    vector<int> joukko;
    int get_index(int i, int j)
    {
        return i * m + j;
    }
    int hae(int x)
    {
        while (joukko[x] != joukko[joukko[x]]) {
            joukko[x] = joukko[joukko[x]];
        }
        return joukko[x];
    }
    pair<int,int> decode(int x)
    {
        return make_pair(x / m + 1, x % m + 1);
    }
    void liita(int y, int x)
    {
        x = hae(x);
        y = hae(y);
        joukko[y] = x;
    }
    aaa()
    {
        joukko.resize(n * m);
        iota(all(joukko), 0);
    }
    pair<int,int> hae(int i, int j)
    {
        i--; j--;
        return decode(hae(get_index(i, j)));
    }
    // x -> y
    void liita(int ix, int jx, int iy, int jy)
    {
        ix--; jx--;
        iy--; jy--;
        liita(get_index(ix, jx), get_index(iy, jy));
    }
};


int main()
{
    cin >> n >> m;
    aaa lauta;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            cin >> board[i][j];
        }
    }
    for (int i = n; i >= 1; --i) {
        for (int j = 1; j <= m; ++j) {
            if (board[i][j] != '.') continue;
            if (i == n) continue;
            if (board[i][j] == '.' && board[i + 1][j] == '.') {
                lauta.liita(i, j, i + 1, j);
            }
        }
    }
    int amt;
    cin >> amt;
    for (int it = 1; it <= amt; ++it) {
        int x;
        cin >> x;
        auto u = lauta.hae(1, x);
        //cout << "landed @ {"<<u.F<<","<<u.S<<"}\n";
//        assert(board[u.F][u.S] == '.');
        board[u.F][u.S] = 'O';
        if (u.F == 1) continue;
        u.F--;
//        assert(board[u.F][u.S] == '.');
        if (tt[u.F + 1][u.S] && board[u.F + 1][u.S + 2] == '.') {
            //cout << "Move jump right\n";
            lauta.liita(u.F + 1, u.S, u.F + 1, u.S + 2);
        }
        else if (board[u.F][u.S - 1] == '.' && board[u.F + 1][u.S - 1] == '.') {
            //cout << "Move left\n";
            lauta.liita(u.F + 1, u.S, u.F + 1, u.S - 1);
            tt[u.F + 1][u.S - 1] = 1;
        }
        else if (board[u.F][u.S + 1] == '.' && board[u.F + 1][u.S + 1] == '.') {
            //cout << "Move right\n";
            lauta.liita(u.F + 1, u.S, u.F + 1, u.S + 1);
        }
        else {
            //cout << "Move up:(\n";
            if (tt[u.F + 1][u.S]) tt[u.F][u.S] = 1;
            lauta.liita(u.F + 1, u.S, u.F, u.S);
        }
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            cout << board[i][j];
        }
        cout << "\n";
    }
}

Test details

Test 1

Verdict:

input
5 5
.....
.....
..X..
.....
...

correct output
.....
.OO..
OOX..
OO...
OOOO.

user output
.....
..O..
..X..
.....
OOOOO

Test 2

Verdict:

input
6 20
....................
..........X.X.......
X...XX.............X
...XX..........X....
...

correct output
....................
O...O.....X.X......O
X..OXX.........O...X
...XX..........X....
......OO.O....O...O.
...

user output
....................
O...O.....X.X......O
X..OXX.........O...X
...XX..........X....
......
...
Truncated

Test 3

Verdict:

input
10 10
..........
..........
.XX....X..
..........
...

correct output
..........
.OO....O..
.XX....X..
..........
.....O...O
...

user output
..........
.OO....O..
.XX....X..
..........
.....O...O
...
Truncated

Test 4

Verdict:

input
15 15
...............
...............
...............
...............
...

correct output
...............
...............
...............
...............
......O........
...

user output
...............
...............
...............
...............
......O........
...
Truncated

Test 5

Verdict:

input
30 7
.......
.......
......X
....X..
...

correct output
.......
.OOO..O
OOOOO.X
OOOOX..
OXXXX..
...

user output
.......
......O
....O.X
.OOOX..
.XXXX..
...
Truncated

Test 6

Verdict:

input
30 30
.................................

correct output
.................................

user output
..............................
...........O.........O........
...........X.........X.O...O

...
Truncated

Test 7

Verdict:

input
30000 5
.....
.....
.....
.....
...

correct output
.....
.....
.....
.....
.O...
...

user output
.....
.....
.....
.....
.O...
...
Truncated

Test 8

Verdict:

input
30000 13
.............
.............
...XX...XX...
.............
...

correct output
.............
...OO...OO...
...XX...XX...
O............
OO...OO...OO.
...

user output
.............
...OO...OO...
...XX...XX...
.............
OO...OO...OO.
...
Truncated

Test 9

Verdict:

input
30000 21
.....................
.....................
.....................
.....................
...

correct output
.....................
.....................
.....................
.....................
.....................
...

user output
.....................
.....................
.....................
.....................
..
...
Truncated

Test 10

Verdict:

input
30000 30
.................................

correct output
.................................

user output
..............................
..............................
............................

...
Truncated