蒟蒻写的 DP。设 fi,0/1/2 表示第 i 轮高桥出 P/S/R。 这代码AC31,WA1。WA on #17。实在不知道哪里有问题。求巨佬帮个忙qwq。
#include<bits/stdc++.h>
#define int long long
#define il inline
#define pii pair<int,int>
#define mk make_pair
#define mod 998244353
using namespace std;
il int rd(){
int jya=0,tl=1;char jyt=getchar();
while(!isdigit(jyt)){if(jyt=='-')tl=-1;jyt=getchar();}
while(isdigit(jyt)){jya=(jya<<1)+(jya<<3)+(jyt-'0');jyt=getchar();}
return jya*tl;
}
il void wr(int jjy){
if(jjy<0)putchar('-'),jjy=-jjy;
if(jjy>9)wr(jjy/10);
putchar(jjy%10+48);
}
//il int max(int x,int y){return x>=y?x:y;}
//il int min(int x,int y){return x<=y?x:y;}
const int JYAAKIOI=1145141919810;
int n,f[500086][10];//0-P 1-S 2-R
char a[500086];
signed main(){
//freopen("jytwcsnm.in","r",stdin);
//freopen("jytwcsnm.out","w",stdout);
n=rd();
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=n;++i){
if(a[i]=='P'){
f[i][0]=max(f[i-1][1],f[i-1][2]);
f[i][1]=max(f[i-1][0],f[i-1][2])+1;
f[i][2]=-JYAAKIOI;
}
if(a[i]=='S'){
f[i][1]=max(f[i-1][0],f[i-1][2]);
f[i][2]=max(f[i-1][1],f[i-1][0])+1;
f[i][0]=-JYAAKIOI;
}
if(a[i]=='R'){
f[i][2]=max(f[i-1][0],f[i-1][1]);
f[i][0]=max(f[i-1][1],f[i-1][2])+1;
f[i][1]=-JYAAKIOI;
}
}
if(a[n]=='P')wr(max(f[n][1],f[n][2]));
if(a[n]=='S')wr(max(f[n][0],f[n][2]));
if(a[n]=='R')wr(max(f[n][0],f[n][1]));
return 0;
}