第一种操作其实是为了将全为0的区段合并,每操作一次全为0的区段就会减少一个。但不是每次都要用操作1.如果x>=y的话,使用操作2一样可以达到目的,而且更省钱。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#define mem(a,x) memset(a,x,sizeof(a));
#define s1(x) scanf("%d",&x);
#define s2(x,y) scanf("%d%d",&x,&y);
#define s3(x,y,z) scanf("%d%d%d",&x,&y,&z);
#define s4(x,y,z,k) scanf("%d%d%d%d",&x,&y,&z,&k);
#define ls 2*rt
#define rs 2*rt+1
#define lson ls,L,mid
#define rson rs,mid+1,R
#define ll long long
using namespace std;
typedef pair<int,int> pii;
const ll inf = 0x3f3f3f3f;
/*void dis(int a[], int n){
printf("总数为%d个\n",n);
for(int i = 0; i < n; i++) cout<<a[i]<<", ";
cout<<endl<<"------------------"<<endl;
}*/
const int mx = 3e5 + 10;
char a[mx];
int n,x,y;
ll ans;
void slove1(){
ans = 0;
int ok = 0;
ll co=0;
for(int i = 0; i < n; i++){
if(ok){
if(a[i] == '1'&& a[i+1] != '1')
ok = 0;
}
else{
if(a[i] == '0'){
co++;
ok = 1;
}
}
}
//return ans;
if(co == 0)
puts("0");
else
cout<<(co-1)*min(x,y)+y<<endl;
}
int main(){
//int T=10;
//scanf("%d",&T);
s3(n,x,y);
//mem()
scanf("%s",a);
slove1();
return 0;
}