「FSLOI Round I」单挑
题目背景
English statement. You must submit your code at the Chinese version of the statement.
小 F 和小 S 经常进行篮球单挑,但小 S 总是被盖帽。
题目描述
每次单挑的结果一定是小 F 获胜或者小 S 获胜,不存在平局的情况。
由于小 F 和小 S 实力不均衡,于是他们制定规则如下:
给定两个整数 x , y x,y x,y,若小 F 先赢 x x x 场,则小 F 获胜。若小 S 先赢 y y y 场,则小 S 获胜。
现在已经进行了
n
n
n 场单挑,这
n
n
n 场单挑的结果由一个字符串
s
s
s 给出。若
s
s
s 的第
i
i
i 位为 F
,则小 F 赢了第
i
i
i 场。若
s
s
s 的第
i
i
i 位为 S
,则小 S 赢了第
i
i
i 场。
小 F 想知道,为了取得胜利,后续的比赛中他最多连续胜利的场数最少是多少。
你总共需要回答 T T T 组询问。
输入格式
第一行一个整数 T T T,表示共有 T T T 组数据。
每组数据共两行。
第一行三个整数 n , x , y n,x,y n,x,y,含义与题目描述一致。
第二行一个长度为 n n n 的字符串 s s s,含义与题目描述一致。
输出格式
共 T T T 行。
每行一个整数,表示小 F 在后续的比赛中最多连续胜利的场数的最小值。
样例 #1
样例输入 #1
1
5 6 4
SFSFS
样例输出 #1
4
样例 #2
样例输入 #2
1
3 7 3
FFF
样例输出 #2
2
样例 #3
样例输入 #3
1
29 1000 20
FFFSFFFFSFFFFFSFFFSFFFFFFSFFF
样例输出 #3
66
提示
【样例 1 解释】
为了让小 F 获胜,后续的比赛结果只能为 $ \texttt {FFFF}$,此时最多连续胜利场数为 4 4 4。
【样例 2 解释】
为了让小 F 获胜,一种可能的后续的比赛结果为 $ \texttt {FFSFSF}$,此时最多连续胜利场数为 2 2 2。
请注意,您只需考虑后续的比赛中的最多连续胜场数,而不需要考虑前 n n n 场。
【数据规模与约定】
本题采用捆绑测试。
对于 100 % 100 \% 100% 的数据,保证:
- 1 ≤ T ≤ 20 1 \leq T \leq 20 1≤T≤20
- 1 ≤ n ≤ 2 × 1 0 5 1 \leq n \leq 2\times10^5 1≤n≤2×105
- 1 ≤ x , y ≤ 1 0 9 1 \leq x,y \leq 10^9 1≤x,y≤109
- ∀ i ≤ n \forall i \leq n ∀i≤n,保证第 i i i 场比赛结束后小 S 没有获胜。
- ∀ i < n \forall i < n ∀i<n,保证第 i i i 场比赛结束后小 F 没有获胜。
子任务 | 分值 | 特殊性质 |
---|---|---|
1 1 1 | 10 10 10 | n = 1 n=1 n=1 |
2 2 2 | 15 15 15 | x , y ≤ n x,y\leq n x,y≤n |
3 3 3 | 15 15 15 | A A A |
4 4 4 | 30 30 30 | T = 1 T=1 T=1 |
5 5 5 | 30 30 30 | 无 |
- 特殊性质 A A A:第 n n n 场比赛结束后,小 S 总共获胜 y − 1 y-1 y−1 场。
C++实现
#include
#include
#include <bits/stdc++.h>
using namespace std;
int t,x,y,n;
string s;
int main() {
cin>>t;
while(t–){
cin>>n>>x>>y;
int sumx=0,sumy=0;
cin>>s;
s=" "+s;
for(int i=1;i<=n;i++){
if(s[i]==‘F’){
sumx++;
}else{
sumy++;
}
}
x-=sumx;
y-=sumy;
cout<<(x+y-1)/y<<endl;
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP C++考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容
标签:15,单挑,FSLOI,30,样例,leq,打卡,获胜 From: https://blog.csdn.net/rogeliu/article/details/143018239