Submission #121965

#TimeUsernameProblemLanguageResultExecution timeMemory
121965KLPPLamps (JOI19_lamps)C++14
100 / 100
153 ms28136 KiB
#include<bits/stdc++.h>

using namespace std;
typedef long long int lld;
typedef pair<lld,lld> pii;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define trav(a,v) for(auto a:v)
int DP[2000000][2][3];
int diff[2000000];
int zeros[2000000];
int ones[2000000];
string A,B;
int valid(int i, int j, int k){
  if(k==0){
    //cout<<(A[i]==B[i])<<endl;
    return ((A[i]==B[i])+j)%2;
  }
  return ((B[i]==(k-1+'0'))+j)%2;
}

int main(){
  int n;
  cin>>n;
  cin>>A>>B;
  rep(i,0,n+1){
    rep(j,0,2){
      rep(k,0,3){
	DP[i][j][k]=10000000;
      }
    }
  }
  DP[0][0][0]=0;
  /*diff[0]=0;
  zeros[0]=0;
  ones[0]=0;
  rep(i,0,n){
    diff[i+1]=diff[i]+(A[i]==B[i]);
    zeros[i+1]=zeros[i]+(B[i]=='0');
    ones[i+1]=ones[i]+(B[i]=='1');
    //cout<<diff[i+1]<<" "<<zeros[i+1]<<" "<<ones[i+1]<<endl;
  }*/
  //cout<<valid(0,1,0)<<endl;
  rep(i,1,n+1){
    rep(j,0,2){
      rep(k,0,3){
	if(valid(i-1,j,k)){
	  rep(l,0,2){
	    rep(m,0,3){
	      
	      DP[i][j][k]=min(DP[i][j][k],DP[i-1][l][m]+((j==1)&&(l==0))+((k>0)&&(m!=k)));
	    }
	  }
	}
      }
    }
  }
  int ans=100000000;
  /*rep(i,0,n+1){
    rep(j,0,2){
      rep(k,0,3){
	cout<<DP[i][j][k]<<" ";
      }cout<<endl;
    }cout<<endl;
  }*/
  rep(j,0,2){
    rep(k,0,3)ans=min(ans,DP[n][j][k]);
  }
  cout<<ans<<endl;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...