#include<cstdio> #include<cstring> /* 别看错了:0能变1,1不能变0 能完成的条件是,s与t长度相等且s中0数量和?数量之和大于等于t中0数量 首先,对于相等的字符显然不应修改 然后: ***抄的 主要就是要注意0能变1,1不能变0 因此,优先满足1->0的情况 *** */ char s[110]; char t[110]; int a1;//0->1 int a2;//1->0 int a3;//?->1 int a4;//?->0 int cse=0,c; int ans; int main() { int i,len; scanf("%d",&c); while(c--) { scanf("%s",s); scanf("%s",t); printf("Case %d: ",++cse); if(strlen(s)!=strlen(t)) { printf("-1 "); continue; } a1=0;a2=0;a3=0;a4=0;ans=0; len=strlen(s); for(i=0;i<len;i++) if(s[i]!=t[i]) { if(s[i]=='0') a1++; else if(s[i]=='1') a2++; else if(t[i]=='1') a3++; else a4++; } if(a1+a3<a2) { printf("-1 "); continue; } while(a1>0&&a2>0) { a1--;a2--;ans++; } while(a3>0&&a2>0) { a3--;a2--;ans+=2; } ans+=a3;ans+=a4; ans+=a1;//曾经忘了导致错误,多余的另三种操作都要用1次完成,不能忽略0->1多余的 printf("%d ",ans); } return 0; }