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;
}

浙公网安备 33010602011771号