题目:https://codeforces.com/problemset/problem/1553/C
题意:给你10个字符,1是进球,2是没进,?是都可以。
奇数是a队踢的,偶数是b队踢的。
如果可以一队获得另一个队伍不能达到的分数,就结束。
请输出最小结束的场次。
题解:分两次计算:
1.奇数 ?改为 1 , 偶数 ?改成 0
1.奇数 ?改为 0 , 偶数 ?改成 1
比较哪个答案小。
//#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
int main()
{
int t;
cin >> t;
while (t--)
{
string s;
cin >> s;
int suma = 0, sumb = 0;
int ans = 0;
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)//a
{
if (s[i] == '1' || s[i] == '?')
{
suma++;
}
}
else//b
{
if (s[i] == '1')
{
sumb++;
}
}
if (suma > (10 - i) / 2 + sumb)
{
//cout << suma << " " << sumb<<" "<< i << endl;
ans = i+1;
break;
}
}
if (ans == 0)
{
ans = 10;
}
suma = 0; sumb = 0;
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)//a
{
if (s[i] == '1' )
{
suma++;
}
}
else//b
{
if (s[i] == '1'|| s[i] == '?')
{
sumb++;
}
}
if (sumb > (9 - i) / 2 + suma)
{
//cout << suma << " " << sumb << " " << i << endl;
if (ans > i+1)
{
ans = i+1;
}
break;
}
}
if (ans == 0)
{
ans = 10;
}
cout << ans << endl;
}
}