1 条题解

  • 0
    @ 2025-8-24 22:17:38

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar OfstAutomataMachine
    蒟蒻

    搬运于2025-08-24 22:17:38,当前版本为作者最后更新于2020-03-24 20:43:05,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    楼下的人的代码都很长抄都不想抄,但真的这么复杂吗?

    首先,如果要在第 kk 次变,前面是出x手势,后面出y手势,那么就是k[x]1xk[x]_{1-x}+k[y]xnk[y]_{x-n}

    其实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;
    }
    
    • 1

    信息

    ID
    5138
    时间
    2000ms
    内存
    250MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者