求助()
查看原帖
求助()
1139577
WydnksqhbD楼主2024/3/9 22:31

不知道为啥,打个前缀和都得爆零/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;
}
2024/3/9 22:31
加载中...