求解

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();

}

}

全部评论
厉害,我看到的都是卡72的
点赞 回复 分享
发布于 02-08 18:33 湖南

相关推荐

不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务