求解
c题只过了90%一般是为什么
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
int n, x, y;
cin >> n >> x >> y;
string a, b, c;
cin >> a >> b >> c;
int sum = 0;
int aa[2] = { 0 }, bb[2] = { 0 };
map<char, int>mpa, mpb;
for (int i = 0; i < n; i++) {
if (a[i] == b[i] && c[i] == '1') {
aa[a[i] - '0']++;
bb[b[i] - '0']++;
if (b[i] == '0')mpa[a[i]]++;
}
if (a[i] != b[i] && c[i] == '0') {
aa[a[i] - '0']++;
bb[b[i] - '0']++;
if (a[i] == '0')mpb[b[i]]++;
}
}
if (2 * x <= y) {
cout << (aa[0] + aa[1]) * x << "\n";
return;
}
if (min(aa[0], aa[1]) > min(bb[0], bb[1])) {
sum += min(aa[0], aa[1]) * y;
if (aa[0] > aa[1]) {
int cc = aa[0] - aa[1];
if (cc & 1)sum += x, cc--;
int ans = min(aa[0] - mpa['0'], mpa['0']);
if (cc <= ans*2) {
sum += cc / 2 * y;
}
else {
sum += ans * y + (cc - 2 * ans) * x;
}
}
else {
int cc = aa[1] - aa[0];
if (cc & 1)sum += x, cc--;
int ans = min(aa[1] - mpa['1'], mpa['1']);
if (cc <= ans*2) {
sum += cc / 2 * y;
}
else {
sum += ans * y + (cc - 2 * ans) * x;
}
}
}
else {
sum += min(bb[0], bb[1]) * y;
if (bb[0] > bb[1]) {
int cc = bb[0] - bb[1];
if (cc & 1)sum += x, cc--;
int ans = min(bb[0] - mpb['0'], mpb['0']);
if (cc <= ans*2) {
sum += cc / 2 * y;
}
else {
sum += ans * y + (cc - 2 * ans) * x;
}
}
else {
int cc = bb[1] - bb[0];
if (cc & 1)sum += x, cc--;
int ans = min(bb[1] - mpb['1'], mpb['1']);
if (cc <= ans*2) {
sum += cc / 2 * y;
}
else {
sum += ans * y + (cc - 2 * ans) * x;
}
}
}
cout << sum << "\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}