先给出代码
int main() {
int t;
// freopen("in.txt","r",stdin);
cin >> t;
while (t--) {
string s;
cin >> s;
int ans = 9;
int cnt0 = 0, cnt1 = 0;
int leftx=5,lefty=5;
for (int i = 0; i < 10; ++i) {
if (i % 2 == 0) {
if (s[i]!='0')cnt0 ++;
leftx--;
}
else
{
if (s[i]=='1')cnt1 ++;
lefty--;
}
if (cnt0 > cnt1 + lefty) {ans = min(ans, i);break;}
if (cnt1 > cnt0 + leftx) {ans = min(ans, i);break;}
}
cnt0 = 0;cnt1 = 0;
leftx=5;lefty=5;
for (int i = 0; i < 10; ++i) {
if (i % 2 == 0) {
if (s[i]=='1')cnt0 += 1;
leftx--;
}
else {
if (s[i]!='0')cnt1 += 1;
lefty--;
}
if (cnt0 > cnt1 + lefty) {ans = min(ans, i);break;}
if (cnt1 > cnt0 + leftx) {ans = min(ans, i);break;}
}
cout << ans + 1 << endl;
}
return 0;
}
这是一道比较典型的贪心题,有2个贪心策略,当遇到“?”的时候,要么一律认为A赢了B输了,要么一律认为A输了B赢了,代码中的两个类似的代码段的意思就是如此。
判断结束也是一件有意思的事,当我得分已经超过你的得分加上剩余射球次数时,可以得出结果了。