ABC D求调
查看原帖
ABC D求调
1020581
The_outcast_person楼主2024/8/3 21:47

蒟蒻写的 DP。设 fi,0/1/2f_{i,0/1/2} 表示第 ii 轮高桥出 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;
}
2024/8/3 21:47
加载中...