笔试训练48天:牛牛冲钻五
牛牛冲钻五:牛牛冲钻五
题号:NC227309
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
牛牛最近在玩炉石传说,这是一款一对一对战的卡牌游戏,牛牛打算努力冲上钻五分段,获得丰厚的天梯奖励。
炉石传说的段位可以用星数来表示,具体规则为:若牛牛本场失败,则扣除一星;若牛牛本场获胜,需要看牛牛是否触发了连胜奖励,若牛牛获得了至少三连胜(即本局对局的上一局和上上局都获胜)则获得kk星,否则获得一星。
现在给出牛牛游玩的nn场记录,请你判断牛牛最终的星数和初始星数的差。
输入描述:
第一行输入一个整数T(1≤T≤104)T(1≤T≤104),测试组数。 每个测试的第一行输入两个整数n(3≤n≤105)n(3≤n≤105)和k(2≤k≤100)k(2≤k≤100),牛牛共打了几场比赛与连胜奖励的星数。 接下来一行输入一个长为nn的字符串,之中WW表示获胜,LL表示失败,保证只含有这两种字母。 保证所有用例的Σn≤105Σn≤105。
输出描述:
对每个测试用例,输出一个整数,表示牛牛最终的星数和初始星数的差.
注意:字母大小写
#include <iostream> #include <string> using namespace std; int t,n,k; string s; //求最终的星数 int fun() { int ret=0; for(int i=0;i<n;i++) { char ch=s[i]; if(ch=='L') { ret--; } else { if(i-1>=0 && i-2>=0 && s[i-1]=='W' && s[i-2]=='W') { ret+=k; } else { ret+=1; } } } return ret; } int main() { cin>>t;//测试组数 while(t--) { cin>>n>>k>>s; cout<<fun()<<endl; } return 0; }