#include <bits/stdc++.h>
using namespace std;
ifstream in("file.in");
int get_between(int i, int j, vector<int> &Pre_Sum)
{
if (i > j)
swap(i, j);
if (i == 0)
return Pre_Sum[j];
return Pre_Sum[j] - Pre_Sum[i - 1];
}
bool check_block_borders(int i, int j, string &s)
{
int l = s.length();
if (i <= 0 || s[i - 1] != 'X')
if (j >= l - 1 || s[j + 1] != 'X')
return true;
return false;
}
int check_block_P (int i, int j, int add, vector<vector<int>> &P, string &s, vector<int> &Pre_Sum)
{
if (j - add + 1 < 0)
return 0;
if (get_between(j - add + 1, j, Pre_Sum) > 0)
return 0;
if (!check_block_borders(j - add + 1, j, s))
return 0;
if (j - add > 0 && P[i - 1][j - add - 1] == 0)
return 0;
if (j - add <= 0 && i != 1)
return 0;
return 1;
}
int check_block_S (int i, int j, int add, vector<vector<int>> &S, string &s, vector<int> &Pre_Sum)
{
int l = s.length();
if (j + add - 1 >= l)
return 0;
if (get_between(j, j + add - 1, Pre_Sum) > 0)
return 0;
if (!check_block_borders(j, j + add - 1, s))
return 0;
if (j + add < l - 1 && S[i - 1][j + add + 1] == 0)
return 0;
if (j + add >= l - 1 && i != 1)
return 0;
return 1;
}
void first_line_init(int i, int j, string &s, vector<vector<int>> &M)
{
while (i != j)
{
M[0][i] = 1;
if (s[i] == 'X')
{ M[0][i] = 0; break; }
if (i < j) i++;
else i--;
}
}
bool can_end_1 (int i, int j, vector<vector<int>> &P, vector<vector<int>> &S)
{
int k = P.size() - 1, l = P[0].size();
bool p1 = (i == 0 && j == 0) || (i > 0 && P[j][i - 1]);
bool p2 = (i == l - 1 && j == k) || (i < l - 1 && S[k - j][i + 1]);
return p1 && p2;
}
bool can_end_2 (int i, int j, int add, vector<vector<int>> &P, vector<vector<int>> &S)
{
int k = P.size() - 1, l = P[0].size();
bool p1 = ((j == 0 && i == 1) || (j > 0 && P[i - 1][j - 1]));
bool p2 = ((j + add == l && k == i) || (j + add < l && S[k - i][j + add]));
return (p1 && p2);
}
void fill_ans (string &ans, int j, int add)
{
for (int i = j; i < j + add; i++)
if (ans[i] == '_')
ans[i] = '?';
}
string solve_puzzle (string s, vector<int> c)
{
int k = c.size(), l = s.length();
bool change_back = false;
string ans;
vector<int> Pre_Sum;
vector<vector<int>> P, S;
Pre_Sum = vector<int> (l, 0);
P = S = vector<vector<int>> (k + 1, vector<int> (l, 0));
ans.assign(l, '_');
for (int i = 0; i < l; i++)
{
if (s[i] == 'X')
ans[i] = 'X';
if (s[i] == '_')
Pre_Sum[i]++;
if (i > 0)
Pre_Sum[i]+= Pre_Sum[i - 1];
}
first_line_init(0, l, s, P);
for (int i = 1; i <= k; i++)
for (int j = 0; j < l; j++)
{
bool _Case = 0, XCase;
if (j > 0)
_Case = P[i][j - 1];
XCase = check_block_P(i, j, c[i - 1], P, s, Pre_Sum);
switch(s[j])
{
case '_':{ P[i][j] = _Case; break; }
case 'X':{ P[i][j] = XCase; break; }
case '.':{ P[i][j] = _Case || XCase; break; }
}
}
first_line_init(l - 1, -1, s, S);
for (int i = 1; i <= k; i++)
for (int j = l - 1; j >= 0; j--)
{
bool _Case = 0, XCase;
if (j + 1 < l)
_Case = S[i][j + 1];
XCase = check_block_S(i, j, c[k - i], S, s, Pre_Sum);
switch(s[j])
{
case '_':{ S[i][j] = _Case; break; }
case 'X':{ S[i][j] = XCase; break; }
case '.':{ S[i][j] = _Case || XCase; break; }
}
}
for (int i = 0; i < l; i++)
{
bool ok = true;
for (int j = 0; j <= k && ok; j++)
if (can_end_1(i, j, P, S))
ok = false;
if (ok)
ans[i] = 'X';
}
for (int i = 1; i <= k; i++)
{
int add = c[i - 1];
for (int j = 0; j <= l - add; j++)
{
if (get_between(j, j + add - 1, Pre_Sum) > 0)
continue;
if (!check_block_borders(j, j + add - 1, ans))
continue;
if (!can_end_2(i, j, add, P, S))
continue;
fill_ans(ans, j, add);
}
}
return ans;
}
Compilation message
paint.cpp: In function 'std::string solve_puzzle(std::string, std::vector<int>)':
paint.cpp:97:10: warning: unused variable 'change_back' [-Wunused-variable]
97 | bool change_back = false;
| ^~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
n = 13, m = 1 |
2 |
Correct |
0 ms |
348 KB |
n = 18, m = 1 |
3 |
Correct |
0 ms |
344 KB |
n = 17, m = 1 |
4 |
Correct |
0 ms |
344 KB |
n = 1, m = 1 |
5 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
6 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
7 |
Correct |
0 ms |
344 KB |
n = 20, m = 1 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
n = 13, m = 1 |
2 |
Correct |
0 ms |
348 KB |
n = 18, m = 1 |
3 |
Correct |
0 ms |
344 KB |
n = 17, m = 1 |
4 |
Correct |
0 ms |
344 KB |
n = 1, m = 1 |
5 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
6 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
7 |
Correct |
0 ms |
344 KB |
n = 20, m = 1 |
8 |
Correct |
0 ms |
344 KB |
n = 20, m = 5 |
9 |
Correct |
1 ms |
344 KB |
n = 18, m = 3 |
10 |
Correct |
0 ms |
348 KB |
n = 17, m = 2 |
11 |
Correct |
0 ms |
344 KB |
n = 20, m = 2 |
12 |
Correct |
1 ms |
344 KB |
n = 17, m = 4 |
13 |
Correct |
1 ms |
600 KB |
n = 17, m = 6 |
14 |
Correct |
1 ms |
344 KB |
n = 17, m = 1 |
15 |
Correct |
0 ms |
344 KB |
n = 17, m = 4 |
16 |
Correct |
1 ms |
500 KB |
n = 13, m = 3 |
17 |
Correct |
1 ms |
344 KB |
n = 18, m = 4 |
18 |
Correct |
1 ms |
344 KB |
n = 20, m = 10 |
19 |
Correct |
0 ms |
348 KB |
n = 19, m = 10 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
n = 13, m = 1 |
2 |
Correct |
0 ms |
348 KB |
n = 18, m = 1 |
3 |
Correct |
0 ms |
344 KB |
n = 17, m = 1 |
4 |
Correct |
0 ms |
344 KB |
n = 1, m = 1 |
5 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
6 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
7 |
Correct |
0 ms |
344 KB |
n = 20, m = 1 |
8 |
Correct |
0 ms |
344 KB |
n = 20, m = 5 |
9 |
Correct |
1 ms |
344 KB |
n = 18, m = 3 |
10 |
Correct |
0 ms |
348 KB |
n = 17, m = 2 |
11 |
Correct |
0 ms |
344 KB |
n = 20, m = 2 |
12 |
Correct |
1 ms |
344 KB |
n = 17, m = 4 |
13 |
Correct |
1 ms |
600 KB |
n = 17, m = 6 |
14 |
Correct |
1 ms |
344 KB |
n = 17, m = 1 |
15 |
Correct |
0 ms |
344 KB |
n = 17, m = 4 |
16 |
Correct |
1 ms |
500 KB |
n = 13, m = 3 |
17 |
Correct |
1 ms |
344 KB |
n = 18, m = 4 |
18 |
Correct |
1 ms |
344 KB |
n = 20, m = 10 |
19 |
Correct |
0 ms |
348 KB |
n = 19, m = 10 |
20 |
Correct |
1 ms |
344 KB |
n = 100, m = 5 |
21 |
Correct |
0 ms |
348 KB |
n = 90, m = 3 |
22 |
Correct |
1 ms |
344 KB |
n = 86, m = 2 |
23 |
Correct |
1 ms |
344 KB |
n = 81, m = 4 |
24 |
Correct |
0 ms |
344 KB |
n = 89, m = 10 |
25 |
Correct |
1 ms |
348 KB |
n = 81, m = 23 |
26 |
Correct |
1 ms |
348 KB |
n = 86, m = 8 |
27 |
Correct |
1 ms |
348 KB |
n = 53, m = 22 |
28 |
Correct |
0 ms |
348 KB |
n = 89, m = 35 |
29 |
Correct |
1 ms |
344 KB |
n = 63, m = 25 |
30 |
Correct |
1 ms |
348 KB |
n = 100, m = 50 |
31 |
Correct |
1 ms |
344 KB |
n = 99, m = 50 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
n = 13, m = 1 |
2 |
Correct |
0 ms |
348 KB |
n = 18, m = 1 |
3 |
Correct |
0 ms |
344 KB |
n = 17, m = 1 |
4 |
Correct |
0 ms |
344 KB |
n = 1, m = 1 |
5 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
6 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
7 |
Correct |
0 ms |
344 KB |
n = 20, m = 1 |
8 |
Correct |
0 ms |
344 KB |
n = 20, m = 5 |
9 |
Correct |
1 ms |
344 KB |
n = 18, m = 3 |
10 |
Correct |
0 ms |
348 KB |
n = 17, m = 2 |
11 |
Correct |
0 ms |
344 KB |
n = 20, m = 2 |
12 |
Correct |
1 ms |
344 KB |
n = 17, m = 4 |
13 |
Correct |
1 ms |
600 KB |
n = 17, m = 6 |
14 |
Correct |
1 ms |
344 KB |
n = 17, m = 1 |
15 |
Correct |
0 ms |
344 KB |
n = 17, m = 4 |
16 |
Correct |
1 ms |
500 KB |
n = 13, m = 3 |
17 |
Correct |
1 ms |
344 KB |
n = 18, m = 4 |
18 |
Correct |
1 ms |
344 KB |
n = 20, m = 10 |
19 |
Correct |
0 ms |
348 KB |
n = 19, m = 10 |
20 |
Correct |
1 ms |
344 KB |
n = 100, m = 5 |
21 |
Correct |
0 ms |
348 KB |
n = 90, m = 3 |
22 |
Correct |
1 ms |
344 KB |
n = 86, m = 2 |
23 |
Correct |
1 ms |
344 KB |
n = 81, m = 4 |
24 |
Correct |
0 ms |
344 KB |
n = 89, m = 10 |
25 |
Correct |
1 ms |
348 KB |
n = 81, m = 23 |
26 |
Correct |
1 ms |
348 KB |
n = 86, m = 8 |
27 |
Correct |
1 ms |
348 KB |
n = 53, m = 22 |
28 |
Correct |
0 ms |
348 KB |
n = 89, m = 35 |
29 |
Correct |
1 ms |
344 KB |
n = 63, m = 25 |
30 |
Correct |
1 ms |
348 KB |
n = 100, m = 50 |
31 |
Correct |
1 ms |
344 KB |
n = 99, m = 50 |
32 |
Correct |
1 ms |
344 KB |
n = 13, m = 4 |
33 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
34 |
Correct |
1 ms |
344 KB |
n = 88, m = 2 |
35 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
36 |
Correct |
0 ms |
348 KB |
n = 81, m = 6 |
37 |
Correct |
0 ms |
344 KB |
n = 98, m = 7 |
38 |
Correct |
1 ms |
344 KB |
n = 92, m = 7 |
39 |
Correct |
1 ms |
344 KB |
n = 88, m = 21 |
40 |
Correct |
1 ms |
344 KB |
n = 90, m = 21 |
41 |
Correct |
1 ms |
344 KB |
n = 98, m = 22 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
n = 13, m = 1 |
2 |
Correct |
0 ms |
348 KB |
n = 18, m = 1 |
3 |
Correct |
0 ms |
344 KB |
n = 17, m = 1 |
4 |
Correct |
0 ms |
344 KB |
n = 1, m = 1 |
5 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
6 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
7 |
Correct |
0 ms |
344 KB |
n = 20, m = 1 |
8 |
Correct |
0 ms |
344 KB |
n = 20, m = 5 |
9 |
Correct |
1 ms |
344 KB |
n = 18, m = 3 |
10 |
Correct |
0 ms |
348 KB |
n = 17, m = 2 |
11 |
Correct |
0 ms |
344 KB |
n = 20, m = 2 |
12 |
Correct |
1 ms |
344 KB |
n = 17, m = 4 |
13 |
Correct |
1 ms |
600 KB |
n = 17, m = 6 |
14 |
Correct |
1 ms |
344 KB |
n = 17, m = 1 |
15 |
Correct |
0 ms |
344 KB |
n = 17, m = 4 |
16 |
Correct |
1 ms |
500 KB |
n = 13, m = 3 |
17 |
Correct |
1 ms |
344 KB |
n = 18, m = 4 |
18 |
Correct |
1 ms |
344 KB |
n = 20, m = 10 |
19 |
Correct |
0 ms |
348 KB |
n = 19, m = 10 |
20 |
Correct |
1 ms |
344 KB |
n = 100, m = 5 |
21 |
Correct |
0 ms |
348 KB |
n = 90, m = 3 |
22 |
Correct |
1 ms |
344 KB |
n = 86, m = 2 |
23 |
Correct |
1 ms |
344 KB |
n = 81, m = 4 |
24 |
Correct |
0 ms |
344 KB |
n = 89, m = 10 |
25 |
Correct |
1 ms |
348 KB |
n = 81, m = 23 |
26 |
Correct |
1 ms |
348 KB |
n = 86, m = 8 |
27 |
Correct |
1 ms |
348 KB |
n = 53, m = 22 |
28 |
Correct |
0 ms |
348 KB |
n = 89, m = 35 |
29 |
Correct |
1 ms |
344 KB |
n = 63, m = 25 |
30 |
Correct |
1 ms |
348 KB |
n = 100, m = 50 |
31 |
Correct |
1 ms |
344 KB |
n = 99, m = 50 |
32 |
Correct |
1 ms |
344 KB |
n = 13, m = 4 |
33 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
34 |
Correct |
1 ms |
344 KB |
n = 88, m = 2 |
35 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
36 |
Correct |
0 ms |
348 KB |
n = 81, m = 6 |
37 |
Correct |
0 ms |
344 KB |
n = 98, m = 7 |
38 |
Correct |
1 ms |
344 KB |
n = 92, m = 7 |
39 |
Correct |
1 ms |
344 KB |
n = 88, m = 21 |
40 |
Correct |
1 ms |
344 KB |
n = 90, m = 21 |
41 |
Correct |
1 ms |
344 KB |
n = 98, m = 22 |
42 |
Correct |
1 ms |
344 KB |
n = 11, m = 2 |
43 |
Correct |
1 ms |
344 KB |
n = 11, m = 2 |
44 |
Incorrect |
1 ms |
344 KB |
char #1 differ - expected: '_', found: '?' |
45 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
n = 13, m = 1 |
2 |
Correct |
0 ms |
348 KB |
n = 18, m = 1 |
3 |
Correct |
0 ms |
344 KB |
n = 17, m = 1 |
4 |
Correct |
0 ms |
344 KB |
n = 1, m = 1 |
5 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
6 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
7 |
Correct |
0 ms |
344 KB |
n = 20, m = 1 |
8 |
Correct |
0 ms |
344 KB |
n = 20, m = 5 |
9 |
Correct |
1 ms |
344 KB |
n = 18, m = 3 |
10 |
Correct |
0 ms |
348 KB |
n = 17, m = 2 |
11 |
Correct |
0 ms |
344 KB |
n = 20, m = 2 |
12 |
Correct |
1 ms |
344 KB |
n = 17, m = 4 |
13 |
Correct |
1 ms |
600 KB |
n = 17, m = 6 |
14 |
Correct |
1 ms |
344 KB |
n = 17, m = 1 |
15 |
Correct |
0 ms |
344 KB |
n = 17, m = 4 |
16 |
Correct |
1 ms |
500 KB |
n = 13, m = 3 |
17 |
Correct |
1 ms |
344 KB |
n = 18, m = 4 |
18 |
Correct |
1 ms |
344 KB |
n = 20, m = 10 |
19 |
Correct |
0 ms |
348 KB |
n = 19, m = 10 |
20 |
Correct |
1 ms |
344 KB |
n = 100, m = 5 |
21 |
Correct |
0 ms |
348 KB |
n = 90, m = 3 |
22 |
Correct |
1 ms |
344 KB |
n = 86, m = 2 |
23 |
Correct |
1 ms |
344 KB |
n = 81, m = 4 |
24 |
Correct |
0 ms |
344 KB |
n = 89, m = 10 |
25 |
Correct |
1 ms |
348 KB |
n = 81, m = 23 |
26 |
Correct |
1 ms |
348 KB |
n = 86, m = 8 |
27 |
Correct |
1 ms |
348 KB |
n = 53, m = 22 |
28 |
Correct |
0 ms |
348 KB |
n = 89, m = 35 |
29 |
Correct |
1 ms |
344 KB |
n = 63, m = 25 |
30 |
Correct |
1 ms |
348 KB |
n = 100, m = 50 |
31 |
Correct |
1 ms |
344 KB |
n = 99, m = 50 |
32 |
Correct |
1 ms |
344 KB |
n = 13, m = 4 |
33 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
34 |
Correct |
1 ms |
344 KB |
n = 88, m = 2 |
35 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
36 |
Correct |
0 ms |
348 KB |
n = 81, m = 6 |
37 |
Correct |
0 ms |
344 KB |
n = 98, m = 7 |
38 |
Correct |
1 ms |
344 KB |
n = 92, m = 7 |
39 |
Correct |
1 ms |
344 KB |
n = 88, m = 21 |
40 |
Correct |
1 ms |
344 KB |
n = 90, m = 21 |
41 |
Correct |
1 ms |
344 KB |
n = 98, m = 22 |
42 |
Correct |
1 ms |
344 KB |
n = 11, m = 2 |
43 |
Correct |
1 ms |
344 KB |
n = 11, m = 2 |
44 |
Incorrect |
1 ms |
344 KB |
char #1 differ - expected: '_', found: '?' |
45 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
n = 13, m = 1 |
2 |
Correct |
0 ms |
348 KB |
n = 18, m = 1 |
3 |
Correct |
0 ms |
344 KB |
n = 17, m = 1 |
4 |
Correct |
0 ms |
344 KB |
n = 1, m = 1 |
5 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
6 |
Correct |
1 ms |
344 KB |
n = 20, m = 1 |
7 |
Correct |
0 ms |
344 KB |
n = 20, m = 1 |
8 |
Correct |
0 ms |
344 KB |
n = 20, m = 5 |
9 |
Correct |
1 ms |
344 KB |
n = 18, m = 3 |
10 |
Correct |
0 ms |
348 KB |
n = 17, m = 2 |
11 |
Correct |
0 ms |
344 KB |
n = 20, m = 2 |
12 |
Correct |
1 ms |
344 KB |
n = 17, m = 4 |
13 |
Correct |
1 ms |
600 KB |
n = 17, m = 6 |
14 |
Correct |
1 ms |
344 KB |
n = 17, m = 1 |
15 |
Correct |
0 ms |
344 KB |
n = 17, m = 4 |
16 |
Correct |
1 ms |
500 KB |
n = 13, m = 3 |
17 |
Correct |
1 ms |
344 KB |
n = 18, m = 4 |
18 |
Correct |
1 ms |
344 KB |
n = 20, m = 10 |
19 |
Correct |
0 ms |
348 KB |
n = 19, m = 10 |
20 |
Correct |
1 ms |
344 KB |
n = 100, m = 5 |
21 |
Correct |
0 ms |
348 KB |
n = 90, m = 3 |
22 |
Correct |
1 ms |
344 KB |
n = 86, m = 2 |
23 |
Correct |
1 ms |
344 KB |
n = 81, m = 4 |
24 |
Correct |
0 ms |
344 KB |
n = 89, m = 10 |
25 |
Correct |
1 ms |
348 KB |
n = 81, m = 23 |
26 |
Correct |
1 ms |
348 KB |
n = 86, m = 8 |
27 |
Correct |
1 ms |
348 KB |
n = 53, m = 22 |
28 |
Correct |
0 ms |
348 KB |
n = 89, m = 35 |
29 |
Correct |
1 ms |
344 KB |
n = 63, m = 25 |
30 |
Correct |
1 ms |
348 KB |
n = 100, m = 50 |
31 |
Correct |
1 ms |
344 KB |
n = 99, m = 50 |
32 |
Correct |
1 ms |
344 KB |
n = 13, m = 4 |
33 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
34 |
Correct |
1 ms |
344 KB |
n = 88, m = 2 |
35 |
Correct |
0 ms |
344 KB |
n = 86, m = 2 |
36 |
Correct |
0 ms |
348 KB |
n = 81, m = 6 |
37 |
Correct |
0 ms |
344 KB |
n = 98, m = 7 |
38 |
Correct |
1 ms |
344 KB |
n = 92, m = 7 |
39 |
Correct |
1 ms |
344 KB |
n = 88, m = 21 |
40 |
Correct |
1 ms |
344 KB |
n = 90, m = 21 |
41 |
Correct |
1 ms |
344 KB |
n = 98, m = 22 |
42 |
Correct |
1 ms |
344 KB |
n = 11, m = 2 |
43 |
Correct |
1 ms |
344 KB |
n = 11, m = 2 |
44 |
Incorrect |
1 ms |
344 KB |
char #1 differ - expected: '_', found: '?' |
45 |
Halted |
0 ms |
0 KB |
- |