题目背景
现在,有许多应用程序为了吸引用户访问,都有签到送积分的活动,若用户连续多天签到,应用程序会阶梯式地赠送更多的积分。
题目描述
有一个应用程序的签到送积分的规则如下:
首先,每天登录将至少得到 1 分;
其次,若用户在前一天也登录了,当天得分为前一天得分加1分;
最后,每天得分的上限为 5分。
给定一个字符序列 s,s 表示一个用户每天签到的情况,若某天签到,记为Y
,若某天没有签到,记为N
。请计算该用户能够获得的积分总数。
输入格式
一个字符序列:保证仅由大写字母
Y
和N
组成。
输出格式
单个正整数,表示用户获得的积分之和。
输入:
YYNYYYYYYNNNYYY
输出:
29
说明:
第一段连续签到:
1+2=3
分
第二段连续签到:1+2+3+4+5+5=20
分
第三段连续签到:1+2+3=6
分
数据范围
设 ∣s∣ 表示字符序列的长度,有 1≤∣s∣≤100000。
解析:本题只要简单模拟就好,设一个变量s表示当天得到的积分数量,ans每次+=s即可。
注意事项: 1.每次签到最多得到5积分,所以ans要+=min(5,s)
2.当没有签到(a[i]=='N')时,s要清零。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
int ans=0,s=0;
cin >> a;
for(int i=0;i<a.size();i++)
{
if(a[i]=='Y')
{
s++;
ans+=min(5,s);
}
else
{
s=0;
}
}
cout<<ans;
return 0;
}