题解 P6120 【[USACO17JAN]Hoof, Paper, Scissor S】
楼下的人的代码都很长抄都不想抄,但真的这么复杂吗?
首先,如果要在第
其实k数组是可以用前缀和完成。
所以代码显而易见,由于我说不是很清楚,具体细节看代码。
喜闻乐见的代码:
#include<bits/stdc++.h>
using namespace std;
int n,s[100001],p[100001],h[100001],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
s[i]=s[i-1];//s的前缀和
p[i]=p[i-1];//p的前缀和
h[i]=h[i-1];//h的前缀和
char c;
cin>>c;
if(c=='S')
s[i]++;
if(c=='P')
p[i]++;
if(c=='H')
h[i]++;
}
for(int i=1;i<=n;i++)
ans=max(ans,max(s[i],max(p[i],h[i]))/*前面最多的*/+max(s[n]-s[i],max(p[n]-p[i],h[n]-h[i])/*后面最多的(因为最多换一次所以可以不换)*/));
cout<<ans;
return 0;
}