#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define pii pair<int, int>
#define pll pair<ll,ll>
#define mp make_pair
#define pb push_back
#define BIT(x,i) (((x)>>(i))&1)
#define MASK(i) (1LL<<(i))
template<typename T1, typename T2> bool minimize(T1 &a, T2 b)
{if(a>=b) a=b; else return 0; return 1;}
template<typename T1, typename T2> bool maximize(T1 &a, T2 b)
{if(a<b) a=b; else return 0; return 1;}
#define file "task"
const int maxn = 1e4 + 5;
const int MOD = 1e9 + 7;
const int oo = 1e9;
const ll OO = 1e18;
int n, m;
int f[1005][12][MASK(10)];
int a[1005][12];
void input(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
string st; cin >> st;
for(int j = 0; j < m; j++){
a[i][j + 1] = st[j] == '#';
// cout << i << " "<< j + 1 << " "<< a[i][j + 1] << " \n"[j == m - 1];
}
}
}
void proc(){
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 < MASK(m); mask++){
if(f[i][j][mask] >= oo) continue;
if(j == m)
minimize(f[i + 1][0][mask], f[i][j][mask]);
else {
if(a[i][j + 1]){
if(BIT(mask, j)){
minimize(f[i][j + 1][mask], f[i][j][mask]);
if(j >= 1 && a[i][j] && BIT(mask, j - 1) == 0){
minimize(f[i][j + 1][mask ^ MASK(j)], f[i][j][mask]);
} else
minimize(f[i][j + 1][mask ^ MASK(j)], f[i][j][mask] + 1);
} else {
minimize(f[i][j + 1][mask ^ MASK(j)], f[i][j][mask] + 1);
if(j >= 1 && a[i][j] && BIT(mask, j - 1) == 0){
minimize(f[i][j + 1][mask], f[i][j][mask]);
} else
minimize(f[i][j + 1][mask], f[i][j][mask] + 1);
}
} else {
if(BIT(mask, j))
minimize(f[i][j + 1][mask ^ MASK(j)], f[i][j][mask]);
else
minimize(f[i][j + 1][mask], f[i][j][mask]);
}
}
}
}
}
int ans = oo;
for(int mask = 0; mask < MASK(m); mask++){
minimize(ans, f[n][m][mask]);
}
cout << ans << '\n';
}
signed main(){
cin.tie(nullptr)->sync_with_stdio(0); cout.tie(nullptr);
if(fopen(file".inp", "r")){
freopen(file".inp", "r", stdin);
freopen(file".out", "w", stdout);
}
input();
proc();
return 0;
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
90 | freopen(file".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
91 | freopen(file".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |