C. Penalty
题目传送门:
题面:
题目大意:
从1~10有10个球,奇数球A队踢;偶数B队踢球。
- 如果是’1’,进球
- 如果是’0’,不进球
- 如果是’?’,未知结果
最少踢多少球就可以不用再比下去了呢?
思路:
两重循环。
情况一:循环让A队踢?球都进。
情况而:循环让B队踢?球都进。
当某队伍的得分>另一只队伍当前得分+剩下的点球数视为无需再比的转折点,更新最小局数ans。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
char s[16];
cin >> s + 1;
int ans = 10;
int a = 0, b = 0;
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
if (s[i] == '1')b++;
} else {
if (s[i] == '1' || s[i] == '?')a++;
}
if (a > b + (10 - i + 1) / 2)
ans = min(i, ans);
//某队伍的得分>另一只队伍当前得分+剩下的点球数
}
a = 0;
b = 0;
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
if (s[i] == '1' || s[i] == '?')b++;
} else {
if (s[i] == '1')a++;
}
if (b > a + (10 - i) / 2)
ans = min(ans, i);
//某队伍的得分>另一只队伍当前得分+剩下的点球数
}
cout << ans << endl;
}
}