洛谷P11076题解

分析

题意

已知小 F 需赢满 xx 场获胜,小 S 需赢满 yy 场获胜。已进行 nn 场比赛,求小 F 要最终获胜时,后续比赛中“最多连续胜场”的最小值。

思路

先统计已有胜场:遍历 ss,求出小 F 已胜 FF 场,小 S 已胜 SS 场。

然后计算后续需求:

小 F 还需胜 k=xFk = x - F 场(k0k \leq 0 时直接输出 00,无需再比)。

小 S 后续最多能胜 r=y1Sr = y-1 - S 场(再胜 11 场就赢了,小 F 失败)。

分类讨论

情况 逻辑 答案
r0r \leq 0 小 S 不能再胜,小 F 需连胜所有 kk kk
r>0r > 0 小 S 的 rr 场胜利将小 F 的 kk 场分成 g=r+1g = r+1 段,尽量平均分 kg\lceil \frac{k}{g} \rceil(即 kmodg>0k \bmod g>0kg+1\frac{k}{g}+1,否则 kg\frac{k}{g}

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n, x, y;
cin >> n >> x >> y;
string s;
cin >> s;
int F = 0, S = 0;
for (int i = 0; i < n; i++) {
if (s[i] == 'F') F++;
else S++;
}
int k = x - F;
if (k <= 0) {
cout << 0 << endl;
continue;
}
int r = y - 1 - S;
if (r <= 0) {
cout << k << endl;
} else {
int g = r + 1;
int b = k / g;
int rem = k % g;
cout << (rem > 0 ? b + 1 : b) << endl;
}
}
return 0;
}

洛谷P11076题解
https://lijingshu2014.github.io/2025/10/03/洛谷P11076题解/
作者
lijingshu
发布于
2025年10月3日
许可协议