This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 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... |