Uva12545

来源:互联网 发布:java中point的用法 编辑:程序博客网 时间:2024/05/22 12:50

题目链接

如果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);    }}