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;
#define int long long
bool make(int j,int k,int a,int b){
if(j!=2){
a=j;
}
a^=k;
return (a==b);
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
string a;
string b;
cin >> a;
cin >> b;
int DP[n][3][2];
int lim=1e9;
for(int i=0;i<n;i++){
for(int j=0;j<3;j++){
for(int k=0;k<2;k++){
DP[i][j][k]=lim;
}
}
}
for(int j=0;j<3;j++){
for(int k=0;k<2;k++){
if(make(j,k,a[0]-'0',b[0]-'0')){
DP[0][j][k]=(j!=2)+(k!=0);
}
}
}
for(int i=0;i<n-1;i++){
for(int j=0;j<3;j++){
for(int k=0;k<2;k++){
if(DP[i][j][k]==lim){
continue;
}
for(int j1=0;j1<3;j1++){
for(int k1=0;k1<2;k1++){
if(make(j1,k1,a[i+1]-'0',b[i+1]-'0')){
DP[i+1][j1][k1]=min(DP[i+1][j1][k1],DP[i][j][k]+(j1!=2&&j1!=j)+(k1!=0&&k1!=k));
}
}
}
}
}
}
int ans=1e9;
for(int j=0;j<3;j++){
for(int k=0;k<2;k++){
ans=min(ans,DP[n-1][j][k]);
}
}
cout << ans;
}
# | 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... |