P10233题解

· · 题解

题目传送门

思路

这道题很简单,思路也很明显,一眼就可以看出来是前缀和。

数据读入时,我们用 a 数组来进行预处理。其中 a_i 代表前 i 个音符的得分和。

然后是 q 次询问,我们只需要输出 a_r-a_{l-1} 即可。

注意不要用 memset!!!否则会 TLE!!!

代码

#include<bits/stdc++.h>
using namespace std;
int a[10000010];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        string s;
        int q;
        cin>>s;
        scanf("%d",&q);
        int n=s.size();
        for(register int i=1;i<=n;i++)
        {
            a[i]=a[i-1];//避免使用 memset
            if (s[i-1]=='P')
                a[i]+=3;
            else if (s[i-1]=='p')
                a[i]+=2;
            else if (s[i-1]=='G')
                a[i]++;
        }
        for(register int i=1;i<=q;i++)
        {
            int l,r;
            scanf("%d%d",&l,&r);
            printf("%d\n",a[r]-a[l-1]);
        }
    }
}