Submission #1286908

#TimeUsernameProblemLanguageResultExecution timeMemory
1286908trinm01Lamps (JOI19_lamps)C++20
6 / 100
163 ms327680 KiB
// #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 = 1e18 + 7;  
const int base = 10;

int n;
int a[MAXN], b[MAXN];

int f[MAXN][4][4][4];
int dp(int i, int t1, int t2, int t3){
	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;
	}
	
	if(t3==1){
		k=0;
	}
	if(t3==2){
		k=1;
	}
	if(t3==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][t3]!=-1){
		return f[i][t1][t2][t3];
	}
	
	int ans=oo;
	if(t3!=0){
		ans=min(ans, dp(i, t1, t2, 0));
	}
	if(t2!=0){
		ans=min(ans, dp(i, t1, t3, 0));
	}
	if(t1!=0){
		ans=min(ans, dp(i, t2, t3, 0));
	}
	
	if(ok && i+1<=n+1){
		ans=min(ans, dp(i+1, t1, t2, t3));
		if(t1==0){
			FOR(j, 1, 3){
				ans=min(ans, dp(i+1, j, t2, t3)+1);
			}
		}
		else if(t2==0){
			FOR(j, 1, 3){
				ans=min(ans, dp(i+1, t1, j, t3)+1);
			}
		}
		else if(t3==0){
			FOR(j, 1, 3){
				ans=min(ans, dp(i+1, t1, t2, j)+1);
			}
		}
	}
	
	return f[i][t1][t2][t3]=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){
    			FOR(t3, 0, 3){
    				f[i][t1][t2][t3]=-1;
    			}
    		}
    	}
    }
    cout << dp(1, 0, 0, 0);
    
    return 0;
}

Compilation message (stderr)

lamp.cpp: In function 'int main()':
lamp.cpp:112:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  112 |         freopen(".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
lamp.cpp:113:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  113 |         freopen(".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...