54 pts 求调
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int n, m;
vector <int> pos;
int ans;
int c[N];
char s[N];
signed main()
{
scanf("%d%d%s", &n, &m, s);
for (int i = 0 ; i < n ; i ++ )
{
scanf("%d", &c[i]);
ans += c[i];
}
for (int i = 0 ; i < n ; i ++ )
if (s[(i - 1 + n) % n] == 'R' && s[(i + 1 + n) % n] == 'L')
pos.push_back(i);
int len = pos.size();
for (int i = 0 ; i < len ; i ++ )
{
int tmp = 0, idx = pos[i];
if (s[idx] == 'R')
{
while (s[(idx - 1 + n) % n] == 'R')
{
idx = (idx - 1 + n) % n;
tmp += c[idx];
}
ans -= min(tmp, m);
}
else
{
while (s[(idx + 1 + n) % n] == 'L')
{
idx = (idx + 1 + n) % n;
tmp += c[idx];
}
ans -= min(tmp, m);
}
}
printf("%d", ans);
return 0;
}