如果S串中的’1’数量大于T串中的’1’数量那么肯定无法得到串T,所以在有解得情况下只要考虑S[i]=’1’&&T[i]=’0’和S[i]=’0’&&T[i]=’1’这两种情况的最大值再加上S串中为’?’的数量
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <string>
#include <string.h>
#include <cmath>
#include <sstream>
#include <set>
#include <map>
#include <functional>
#include <queue>
#include <vector>
using namespace std;
const int maxn = 200;
int t;
char str1[maxn], str2[maxn];
int main()
{
scanf("%d", &t);
int Case = 0;
getchar();
while (t--)
{
int s1, t1, ss1, ss;
s1 = t1 = ss1 = ss = 0;
scanf("%s %s", str1, str2);
int len = strlen(str1);
for (int i = 0; i < len; i++)
{
if (str1[i] == '1' && str2[i] == '0')
s1++;
if (str1[i] == '0' && str2[i] == '1')
t1++;
if (str1[i] == '?')
ss++;
if (str1[i] == '?'&&str2[i] == '1')
ss1++;
}
if (s1 > t1 + ss1)
printf("Case %d: -1\n", ++Case);
else
printf("Case %d: %d\n",++Case, max(s1, t1) + ss);
}
}