P14794 [NERC 2025] Medical Parity题解

· · 题解

思路

我用贪心,这道题考察了前缀异或,主要有两种操作:

所以贪心代码如下。

#include<bits/stdc++.h>
using namespace std;
int a[10000001],b[10000001],c[10000001];
void solve(string x,string y){
    int t=x.size();
    x=' '+x;
    y=' '+y;
    int now=0,len=0,ans=0;
    for(int i=1;i<=t;i++){
        now=x[i]-'0';
        a[i]=now;
        a[i]=a[i]^a[i-1];
        b[i]=a[i]^1;
    }
    for(int i=1;i<=t;i++){
        c[i]=y[i]-'0';
    }
    bool flag=0;
    for(int i=1;i<=t;i++){
        if(!flag){
            if(a[i]!=c[i])len++;
            else{
                if(len==1)len=0,ans++;
                else if(len>1) len=1,flag=1,ans++;
            }
        }
        else{
            if(b[i]!=c[i])len++;
            else{
                if(len==1)len=0,ans++;
                else if(len>1) len=1,flag=0,ans++;
            }
        }
    }
    if(len)ans++;
    cout<<ans<<endl;
}
int main(){
    int n;
    cin>>n;
    while(n--){
        string x,y;
        cin>>x>>y;
        solve(x,y);
    }
}