Submission #1223184

#TimeUsernameProblemLanguageResultExecution timeMemory
1223184fermatLamps (JOI19_lamps)C++20
100 / 100
49 ms65124 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;
}

Compilation message (stderr)

lamp.cpp:11:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   11 | 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]
   15 |  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]
   16 |  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...