不知道为啥,打个前缀和都得爆零/kk
代码上面的那一堆是快读,函数在 main() 下面。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int sum[10000005];
int solve(char);
string getstr();
template<typename type>
void read(type&x)
{
x=0;bool flag(0);char ch=getchar();
while(!isdigit(ch)) flag^=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
flag?x=-x:0;
}
template<typename type>
void write(type x)
{
x<0?x=-x,putchar('-'):0;
static short Stack[50],top(0);
do Stack[++top]=x%10,x/=10;while(x);
while(top)putchar(Stack[top--]|48);
}
char read(char&ch){return getchar();}
char write(const char&ch){return putchar(ch);}
template<typename type,typename...T>
void read(type&x,T&...y){read(x),read(y...);}
template<typename type,typename...T>
void write(type x,T...y){write(x),putchar(' '),write(y...),sizeof...(y)^1?0:putchar('\n');}
signed main()
{
int t;read(t);
while(t--)
{
string s=getstr();s=" "+s;
int q,len=s.size();read(q);
for(int i=1;i<=len;i++)
{
sum[i]=sum[i-1]+solve(s[i]);
}
while(q--)
{
int l,r;read(l,r);
write(sum[r]-sum[l-1]);
}
}
return 0;
}
int solve(char ch)
{
switch(ch)
{
case'P':return 3;
case'p':return 2;
case'G':return 1;
}
return 0;
}
string getstr()
{
char ch=getchar();string s;
while(ch!=' '&&ch!='\n'&&ch!='\r')s+=ch,ch=getchar();
return s;
}