水题一枚。
AC代码:
#include<iostream>
#include<cstdio>
#include<set>
#include<algorithm>
#include<cstring>
using namespace std;
string s, t;
int n, kase=0;
int main(){
scanf("%d", &n);
while(n--){
cin>>s>>t;
int last_0=0, last_1=0;
for(int i =0; i<s.size();++i){
if(t[i]=='0') ++last_0;
else if(t[i]=='1') ++last_1;
if(s[i]=='0') --last_0;
else if(s[i]=='1') --last_1;
}
if(last_1<0) { printf("Case %d: -1\n", ++kase); continue;}
int sum=0;
for(int i =0; i<s.size();++i){
if(s[i]=='?'){
char val;
if(last_0==0) val='1';
else if(last_1==0) val='0';
else if(t[i]=='0') val='0';
else if(t[i]=='1') val='1';
s[i]=val;
++sum;
if(val=='1') --last_1;
else --last_0;
}
if(s[i]!=t[i]&&t[i]=='1') ++sum;
}
printf("Case %d: %d\n", ++kase, sum);
}
return 0;
}