期末考炸完后重新开始做OI,先在Codeforces里面做一段时间锻炼一下思维,最近几篇都会写CF的文章,尽量把思维写得详细一点。
题解:
这题里面x,y的大小是很重要的。
我们发现如果一个子串invert n次等于那个子串reverse n-1次再invert 1次。
那么就很显然了。
如果y小则直接每一个0的子串都invert。
如果x小则先reverse之后再invert 1次。
Code:
#include<bits/stdc++.h>
#define N 300005
using namespace std;
char s[N];
int main()
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
scanf("%s",s);
int p=0;
for(int i=0;i<n;i++)
if(s[i]=='0')p++;
if(p==0)
{
puts("0");
return 0;
}
long long ans=0;
if(x>=y)
{
for(int i=1;i<n;i++)
if(s[i]=='1'&&s[i-1]=='0')ans+=y;
if(s[n-1]=='0')ans+=y;
printf("%lld\n",ans);
}else
{
if(s[0]=='0')p=1;else p=0;
for(int i=1;i<n;i++)
if(s[i]=='0')
{
p++;
if(p>1&&s[i-1]=='1')ans+=x;
}
ans+=y;
printf("%lld\n",ans);
}
return 0;
}