2020“美团杯”A查查查乐乐

查查查乐乐

“查查查乐乐”是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量;而如果这段咒语出现在了不具资格的魔法师的口中,这个魔法师将会遭到咒语的反噬并付出可怕的代价。

这个学期,镁团在一家魔法早教学校做兼职,他的任务是教小学生们魔法并帮助他们准备一年一度的全国魔法奥林匹克竞赛 (NOMP)。今天,镁团在整理图书的时候,突然发现一本课外教材中包含了 tt 段只由查和乐组成的咒语。让小学生们阅读这些咒语是非常危险的:他们可能会在无意识中念出“查查查乐乐”。

因此,作为一名富有责任心的儿童教师,镁团打算修改这些咒语,从而最大程度地杜绝这方面的隐患。镁团认为一段由查和乐组成的咒语是危险的当且仅当在删去咒语中的若干个字(也可以不删)后,剩下的咒语可能变成查查查乐乐。举例来说,“查查查乐乐”,“查查乐查乐乐” 就是危险的,而 “乐乐查查查”,“乐查乐乐查乐查查”就不是危险的。

对于每一段咒语,镁团都可以选择若干个位置并对这些位置进行修改:他可以把“查”变成“乐”,也可以把“乐”变成“查”。为了最大限度地保留教学效果,镁团希望使用尽可能少的修改来消除所有的危险性:对于每一段咒语,镁团都希望你帮他计算一下最少的修改次数。

输入格式

输入第一行是一个整数 t(1t1000)t(1≤t≤1000),表示咒语的数量。

对于每组数据,输入包含一行一个只包含字符 x 和 l 的字符串 s(1|s|100)s(1≤|s|≤100),描述了一段咒语。其中 x 表示“查”,l 表示 “乐”。

输出格式

对于每段咒语,输出一行一个整数表示最少的修改次数。

样例一

input

3
xxxll
xxlxllllxl
xxxxxlllll

output

1
1
3

explanation

对于三段咒语,我们分别给出一种让修改次数最小的方案:

  1. xxlll,修改了第 3个字
  2. xxllllllxl,修改了第 4个字
  3. xxllllllll, 修改了第 3,4,5个字 

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5    int t;
 6    cin>>t;
 7    string s;
 8    while(t--)
 9    {
10        cin>>s;
11        int len=s.length();
12        int x=0,l=0;
13        int ans=0;
14        for(int i=0;i<s.length();++i)
15        {
16            if(s[i]=='x')
17             {
18                 x++;
19                 if(x==3)
20                     l=0;
21             }
22             if(s[i]=='l')
23             {
24                 l++;
25                 if(x<3&&l>=2)   //如果前面达不到xxx时
26                 {
27                     l=0;       //更新l的个数=0
28                 }
29                 if(x>=3&&l>=2)
30                 {
31                     x--;  //若l较多,则x变成l,若x较多,则看做l变成x即可
32                     ans++;
33                 }
34             }
35        }
36        cout<<ans<<endl;
37    }
38    return 0;
39 }

猜你喜欢

转载自www.cnblogs.com/acmer-hmin/p/12919367.html