Submission #105055

#TimeUsernameProblemLanguageResultExecution timeMemory
105055antimirageLamps (JOI19_lamps)C++14
100 / 100
106 ms67064 KiB
# include <bits/stdc++.h>
 
using namespace std;
 
const int N = 1e6 + 5;
 
int n, dp[N][4][4];
 
char a[N], b[N];

main(){ 
	memset( dp, 0x3f3f3f3f, sizeof(dp) );

	cin >> n;
	scanf("\n%s", a + 1);
	scanf("\n%s", b + 1);

	dp[0][2][0] = 0;
	for (int i = 1; i <= n; i++){
	
		for (int j = 0; j < 3; j++){
		
			if (b[i] - 48 == j){
			
				dp[i][j][0] = min(dp[i - 1][j][1], dp[i - 1][j][0]);
				
				for (int l = 0; l < 3; l++){
	
					dp[i][j][0] = min( dp[i][j][0], dp[i - 1][l][0] + 1);
					dp[i][j][0] = min( dp[i][j][0], dp[i - 1][l][1] + 1);
				}
			}
			if (b[i] - 48 == (j ^ 1) ){
				
				dp[i][j][1] = min( dp[i - 1][j][0] + 1, dp[i - 1][j][1]);
				
				for (int l = 0; l < 3; l++){
					
					dp[i][j][1] = min( dp[i][j][1], dp[i - 1][l][1] + 1);
				}
			}
			if (j == 2 && b[i] == a[i]){
				
				for (int l = 0; l < 3; l++){
					
					dp[i][j][0] = min( dp[i][j][0], dp[i - 1][l][0]);
					dp[i][j][0] = min( dp[i][j][0], dp[i - 1][l][1]);
				}
			}
			if (j == 2 && b[i] != a[i]){
				
				for (int l = 0; l < 3; l++){
					
					dp[i][j][1] = min( dp[i][j][1], dp[i - 1][l][1]);
					dp[i][j][1] = min( dp[i][j][1], dp[i - 1][l][0] + 1);
				}
			}
		}
	}
	int ans = n + 1;
	
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 2; j++)
			ans = min(ans, dp[n][i][j]);
			
	cout << ans << endl;
}
/**
13
0101100101001
1011111000000

13
0001101001101
0101100011011

8
11011100
01101001
**/

Compilation message (stderr)

lamp.cpp:11:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(){ 
      ^
lamp.cpp: In function 'int main()':
lamp.cpp:15:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("\n%s", a + 1);
  ~~~~~^~~~~~~~~~~~~~~
lamp.cpp:16:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("\n%s", b + 1);
  ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...