8-3 Bits Equalizer uva12545

  题意:

给出字符串s包含'0' '1' '?';

再给出字符串t只包含01;

现在我们可以对S做三个操作;把0变成1,把?变成0或1,任意两个位置交换;

问最少操作几次s == t;

贪心 默认除去那些已经相同的     然后收集四种信息  

共有三种不同的情况  直接模拟即可

#include<bits/stdc++.h>
using namespace std;
#define N 200000+5
int main()
{
    int n;cin>>n;
    char a[N],b[N];
    for(int kase=1;kase<=n;kase++)
    {
        int c=0;
        int one,zero;//代表a和b不同时 a为什么
        int ask_one,ask_zero;//代表问号下面是几
        one=zero=ask_one=ask_zero=0;
        scanf("%s%s",a,b);
        for(int i=0;i<strlen(a);i++)
        {
            if(a[i]==b[i])continue;
            if(a[i]=='1'&&b[i]=='0')one++;
            if(a[i]=='0'&&b[i]=='1')zero++;
            if(a[i]=='?')
            {
                if(b[i]=='0')ask_zero++;
                else   ask_one++;
            }
        }
        if(zero>=one)
            c=zero+ask_one+ask_zero;
        else
        {
            if(one-zero>ask_one){c=-1;}
            else
             c+= ask_one+ask_zero+one;
            
        }
        printf("Case %d: %d
",kase,c);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/bxd123/p/10446709.html