题意很清楚,所以我们只需要找到C后面的O,O后面的W即可
所以需要倒序进行遍历,然后进行记录每个O后面的W
这里防止重复计算用sum与x充当前缀和功能(原本是n^2的复杂度这样优化后应该就相当于n的了)
#include<iostream>
using namespace std;
const int N=1e5+10;
long long res,m,sum,x;
int n;
char s[N];
int a[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>s[i];
for(int i=n;i>=1;i--)
{
if(s[i]=='W')a[m]++;
else if(s[i]=='O')
{
m++;
a[m]=a[m-1];
}
else
{
for(int j=x;j<m;j++)sum+=a[j];
x=m;
res+=sum;
}
}
cout<<res;
return 0;
}