| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1300644 | nguyn | Selotejp (COCI20_selotejp) | C++20 | 54 ms | 60868 KiB |
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...)
#endif // LOCAL
#define ll long long
#define F first
#define S second
#define pb push_back
#define pii pair<int, int>
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
const int N = 2e5 + 5;
const int mod = 1e9 + 7;
const int inf = 2e9;
int n, m;
char a[1005][15];
int f[1005][15][(1 << 10)];
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
memset(f, 0x3f, sizeof(f));
f[0][m][0] = 0;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
for (int mask = 0; mask < (1 << m); mask++) {
if (f[i][j][mask] >= inf) continue;
if (j == m) {
f[i + 1][0][mask] = min(f[i + 1][0][mask], f[i][j][mask]);
continue;
}
if (a[i][j + 1] == '#') {
if (mask >> j & 1) {
f[i][j + 1][mask] = min(f[i][j + 1][mask], f[i][j][mask]);
if (j >= 1 && a[i][j] == '#' && (mask >> (j - 1) & 1) == 0) {
f[i][j + 1][mask ^ (1 << j)] = min(f[i][j + 1][mask ^ (1 << j)], f[i][j][mask]);
}
else {
f[i][j + 1][mask ^ (1 << j)] = min(f[i][j + 1][mask ^ (1 << j)], f[i][j][mask] + 1);
}
}
else {
f[i][j + 1][mask ^ (1 << j)] = min(f[i][j + 1][mask ^ (1 << j)], f[i][j][mask] + 1);
if (j >= 1 && a[i][j] == '#' && (mask >> (j - 1) & 1) == 0) {
f[i][j + 1][mask] = min(f[i][j + 1][mask], f[i][j][mask]);
}
else {
f[i][j + 1][mask] = min(f[i][j + 1][mask], f[i][j][mask] + 1);
}
}
}
else {
if (mask >> j & 1) {
f[i][j + 1][mask ^ (1 << j)] = min(f[i][j + 1][mask ^ (1 << j)], f[i][j][mask]);
}
else {
f[i][j + 1][mask] = min(f[i][j + 1][mask], f[i][j][mask]);
}
}
}
}
}
int res = inf;
for (int i = 0; i < (1 << m); i++) {
res = min(res, f[n][m][i]);
}
cout << res << '\n';
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#define task "template"
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int T = 1;
// cin >> T;
while (T--) {
solve();
}
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
