天天看点

uva 12545 - Bits Equalizer(比特变化器)

好在原来做题的思路不知道何时就养成了这种思路,可能是见这种思路多了一点吧,就自然的想到了用这种方法。

没有什么原因,思路题么,有思路那还用多说些什么,而思路是怎么来的,就更没什么好说的了。。。多去体会大神的思路或许是我等菜鸟提高的一个途径吧

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;

string s1,s2;
int cnt0,cnt1,cnt2;
int main()
{
    int t;
    scanf("%d",&t);
    for(int kase=1; kase<=t; kase++)
    {
        cin>>s1>>s2;
        cnt0=cnt1=cnt2=0;
        int cnt11=0,cnt21=0;
        for(int i=0; i<s2.size(); i++)
        {
            if(s1[i]=='?') cnt2++;
            if(s1[i]=='1') cnt11++;
            if(s2[i]=='1') cnt21++;
            if(s2[i]!=s1[i]&&s1[i]!='?')
            {
                if(s2[i]=='0')
                    cnt0++;
                if(s2[i]=='1')
                    cnt1++;
            }
        }
        if(cnt11>cnt21)
        {
            printf("Case %d: -1\n",kase);
            continue;
        }
        int ans=0;
        if(cnt0==cnt1)
        {
            ans+=cnt0;
            ans+=cnt2;
        }
        if(cnt0>cnt1)
        {
            ans+=cnt1;
            ans+=(cnt0-cnt1);
            ans+=cnt2;
        }
        if(cnt0<cnt1)
        {
            ans+=cnt0;
            ans+=(cnt1-cnt0);
            ans+=cnt2;
        }
        printf("Case %d: %d\n",kase,ans);
    }
    return 0;
}
           

其实是可以合并,但是合并的过程我还不能一次就写出来,思考的深度还到不了那个层次,一步想太深了会是自己理不清楚,会出错误。

需要多想,往深里想,理清思路。