#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const int maxn=100+10; int t; string s1,s2; int main() { scanf("%d",&t); for(int Case=1; Case<=t; Case++) { cin >> s1 >> s2; int snum=0,tnum=0,qnum=0,ans=0; for(int i=0; i<s1.length(); i++) { if(s2[i]=='0') tnum++; if(s1[i]=='0') snum++; if(s1[i]=='?')//'?'变化总需要一步 { qnum++; ans++; } if(s2[i]=='0'&&s1[i]=='?')//'?'变成0,变化的步数在上面已经计算过了,所以不用再计算 { s1[i]='0'; qnum--; snum++; } } printf("Case %d: ",Case); if(qnum+snum-tnum<0)//如果?和0的数量少于需要达到的目标数,则永远不会成立 { printf("-1\n"); continue; } int sub=tnum-snum; if(sub>0) ans+=sub;//起始串和目标串之间的差值,即?变成0,然后移动 for(int i=0; i<s1.length(); i++) { if(s1[i]=='0'&&s2[i]=='1')//将非?变成的0变成1,因为?变成的0必然一一对应目标串相同位置的0,所以这里必然不是 ans++; } printf("%d\n",ans); } return 0; }