// #pragma GCC optimize("O3")
// #pragma GCC optimization("Ofast,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define ll long long
#define FOR(i, l, r) for (int i = (l); i <= (r); i++)
#define FOD(i, r, l) for (int i = (r); i >= (l); i--)
#define fi first
#define se second
#define pii pair<int, int>
const ll mod = 1e9 + 7;
const int MAXN = 1e6 + 5;
const ll oo = 1e9 + 7;
const int base = 10;
int n;
int a[MAXN], b[MAXN];
int f[MAXN][4][4];
int dp(int i, int t1, int t2){
int ok=1;
int k=a[i-1];
if(t1==1){
k=0;
}
if(t1==2){
k=1;
}
if(t1==3){
k=1-k;
}
if(t2==1){
k=0;
}
if(t2==2){
k=1;
}
if(t2==3){
k=1-k;
}
// cout << i << ' ' << a[i-1] << ' ' << t1 << ' ' << t2 << ' ' << t3 << ' ' << k << ' ' << b[i-1] << '\n';
if(k!=b[i-1]){
ok=0;
}
if(i>n && ok){
// cout << a[i-1] << ' ' << t1 << ' ' << t2 << ' ' << t3 << ' ' << k << ' ' << b[i-1] << '\n';
return 0;
}
if(f[i][t1][t2]!=-1){
return f[i][t1][t2];
}
int ans=oo;
if(t2!=0){
ans=min(ans, dp(i, t1, 0));
}
if(t1!=0){
ans=min(ans, dp(i, t2, 0));
}
if(ok && i+1<=n+1){
ans=min(ans, dp(i+1, t1, t2));
if(t1==0){
FOR(j, 1, 3){
ans=min(ans, dp(i+1, j, t2)+1);
}
}
else if(t2==0){
FOR(j, 1, 3){
ans=min(ans, dp(i+1, t1, j)+1);
}
}
}
return f[i][t1][t2]=ans;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// freopen("test.txt", "r", stdin);
// freopen("o2.out", "w", stdout);
if(fopen(".inp", "r")){
freopen(".inp", "r", stdin);
freopen(".out", "w", stdout);
}
cin >> n;
FOR(i, 1, n){
char c;
cin >> c;
a[i]=(int)(c-'0');
}
FOR(i, 1, n){
char c;
cin >> c;
b[i]=(int)(c-'0');
}
FOR(i, 0, n+1){
FOR(t1, 0, 3){
FOR(t2, 0, 3){
f[i][t1][t2]=-1;
}
}
}
cout << dp(1, 0, 0);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
lamp.cpp: In function 'int main()':
lamp.cpp:94:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
94 | freopen(".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~
lamp.cpp:95:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
95 | freopen(".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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |