AT5659题解

思路

我们可以考虑建立两个数组 a 和 b,用两种方法构造方案,最后再取其中最大值即可。

  • 所以先从前往后扫一遍字符串,如果 \(s_i='<'\),那么构造方案 \(a_{i+1}=a_{i}+1\)

  • 再从后往前扫一遍字符串,如果 \(s_i='>'\),那么构造方案 \(b_{i}=b_{i+1}-1\)

接着求 \(\sum\limits_{i=1}^l\max(a_i,b_i)\),其中 l 为字符串长度。

代码

#include<bits/stdc++.h>
using namespace std;
long long a[500002],b[500002];
int main()
{
    string s;
    long long ans;
    cin>>s;
    s=" "+s;
    int l=s.length();
    for(int i=1;i<=l;i++)//第一种方案
        if(s[i]=='<') a[i+1]=a[i]+1;
    for(int i=l;i>=1;i--)//第二种方案
        if(s[i]=='>') b[i]=b[i+1]+1;
    for(int i=1;i<=l;i++)
        ans+=max(a[i],b[i]);
    cout<<ans;
}
posted @ 2022-02-09 19:21  cycwss  阅读(40)  评论(0)    收藏  举报