好在原来做题的思路不知道何时就养成了这种思路,可能是见这种思路多了一点吧,就自然的想到了用这种方法。
没有什么原因,思路题么,有思路那还用多说些什么,而思路是怎么来的,就更没什么好说的了。。。多去体会大神的思路或许是我等菜鸟提高的一个途径吧
#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;
}
其实是可以合并,但是合并的过程我还不能一次就写出来,思考的深度还到不了那个层次,一步想太深了会是自己理不清楚,会出错误。
需要多想,往深里想,理清思路。