链接:
https://codeforces.com/problemset/problem/1553/C
题意:
点球大战,总共10个球,有一队进球数大于另一队,就获胜,进球数相等则平局,但有时不需要踢完也能决出胜负,求最少的踢球数。
本题最少要踢6个球,所以可以从踢6个球的情况往后遍历,直到发现有一种情况可以决出胜负。如果有一方确定进球数+未知进球数大于另一方确定进球数+后面还能踢的球数,就可以结束比赛。
代码如下:
#include<iostream>
#include<string>
using namespace std;
typedef long long ll;
int main() {
int T;
cin >> T;
while (T--) {
string s;
cin >> s;
int res = 10;
for (int ans = 6; ans <= 10; ans++) {
int sco1 = 0;
int sco2 = 0;
int unk1 = 0;
int unk2 = 0;
for (int i = 0; i < ans; i++) {
if (i & 1) {
if (s[i] == '1') {
sco2++;
}
else if (s[i] == '?') {
unk2++;
}
}
else {
if (s[i] == '1') {
sco1++;
}
else if (s[i] == '?') {
unk1++;
}
}
}
if (sco1 + unk1 > (10 - ans + 1) / 2 + sco2 || sco2 + unk2 > (10 - ans) / 2 + sco1) {
res = ans;
break;
}
}
cout << res;
cout << endl;
}
}