| Task: | Kamen |
| Sender: | henrikaalto |
| Submission time: | 2019-07-25 17:12:48 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 0 |
| group | verdict | score |
|---|---|---|
| #1 | RUNTIME ERROR | 0 |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | details |
| #2 | ACCEPTED | 0.01 s | details |
| #3 | ACCEPTED | 0.01 s | details |
| #4 | ACCEPTED | 0.01 s | details |
| #5 | ACCEPTED | 0.01 s | details |
| #6 | ACCEPTED | 0.01 s | details |
| #7 | RUNTIME ERROR | 0.01 s | details |
| #8 | RUNTIME ERROR | 0.01 s | details |
| #9 | RUNTIME ERROR | 0.01 s | details |
| #10 | RUNTIME ERROR | 0.01 s | details |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:47:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &n, &m);
~~~~~^~~~~~~~~~~~~~~~
input/code.cpp:60:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &amt);
~~~~~^~~~~~~~~~~~
input/code.cpp:64:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &it);
~~~~~^~~~~~~~~~~Code
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("arch=sandybridge")
#include<stdio.h>
#include<vector>
#include<assert.h>
#define N 30100
#define M 35
char board[N][M];
int n, m;
inline int isfree(int y, int x)
{
if (y >= n || x >= m || y < 0 || x < 0) return 0;
return board[y][x] == '.';
}
int min(int a, int b) { return a < b ? a : b; }
struct segtree {
int sz;
std::vector<int> puu;
segtree (int n, int fill)
{
n++;
int c = 1;
while (c * 2 <= n) c*= 2;
sz = c;
puu.resize(sz*2+5,fill);
}
void muuta(int k, int x)
{
k++;
puu[k += sz] = x;
for (k/=2;k;k/=2)puu[k]=min(puu[k*2],puu[k*2+1]);
}
int hae(int a, int b)
{
a++;b++;
int r = N;
for (a+=sz,b+=sz;a<=b;a/=2,b/=2) {
if (a & 1) r = min(r, puu[a++]);
if (~b& 1) r = min(r, puu[b--]);
}
return r;
}
};
segtree*asd[M];
int main()
{
scanf("%d%d", &n, &m);
for (int j = 0; j < m; ++j)
asd[j] = new segtree(n+1,n);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
char &c = board[i][j];
do {c=getchar_unlocked();} while(c!='X'&&c!='.');
if (c == 'X') {
asd[j]->muuta(i,i);
}
}
}
int amt;
scanf("%d", &amt);
for (int i = 0; i < amt; ++i) {
int it;
// printf("kivi %d\n", i);
scanf("%d", &it);
int y = 0;
int x = it - 1;
for (;;)
{
y = (asd[x]->hae(y, n)) - 1;
// printf("y=%d x=%d\n", y, x);
if (y + 1 >= n) break;
else if (board[y + 1][x] == 'O') {
if (isfree(y + 1, x - 1) && isfree(y, x - 1)) {
x--;
y++;
}
else if (isfree(y, x + 1) && isfree(y + 1, x + 1)) {
x++;
y++;
}
else break;
}
else break;
}
asd[x]->muuta(y, y);
board[y][x] = 'O';
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
putchar_unlocked(board[i][j]);
}
putchar_unlocked('\n');
}
}
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 5 5
..... ..... ..X.. ..... ... |
| correct output |
|---|
| .....
.OO.. OOX.. OO... OOOO. |
| user output |
|---|
| ..... .OO.. OOX.. OO... OOOO. |
Test 2
Verdict: ACCEPTED
| 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: ACCEPTED
| 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: ACCEPTED
| input |
|---|
| 15 15
............... ............... ............... ............... ... |
| correct output |
|---|
| ...............
............... ............... ............... ......O........ ... |
| user output |
|---|
| ............... ............... ............... ............... ......O........ ... Truncated |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 30 7
....... ....... ......X ....X.. ... |
| correct output |
|---|
| .......
.OOO..O OOOOO.X OOOOX.. OXXXX.. ... |
| user output |
|---|
| ....... .OOO..O OOOOO.X OOOOX.. OXXXX.. ... Truncated |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 30 30
................................. |
| correct output |
|---|
| ................................. |
| user output |
|---|
| .............................. ...........O.........O........ ...........X.........X.O...O ... Truncated |
Test 7
Verdict: RUNTIME ERROR
| input |
|---|
| 30000 5
..... ..... ..... ..... ... |
| correct output |
|---|
| .....
..... ..... ..... .O... ... |
| user output |
|---|
| (empty) |
Test 8
Verdict: RUNTIME ERROR
| input |
|---|
| 30000 13
............. ............. ...XX...XX... ............. ... |
| correct output |
|---|
| .............
...OO...OO... ...XX...XX... O............ OO...OO...OO. ... |
| user output |
|---|
| (empty) |
Test 9
Verdict: RUNTIME ERROR
| input |
|---|
| 30000 21
..................... ..................... ..................... ..................... ... |
| correct output |
|---|
| .....................
..................... ..................... ..................... ..................... ... |
| user output |
|---|
| (empty) |
Test 10
Verdict: RUNTIME ERROR
| input |
|---|
| 30000 30
................................. |
| correct output |
|---|
| ................................. |
| user output |
|---|
| (empty) |
