C题具体应该怎么想才是正确的?感觉怎么想都会被hack
同上
#include<bits/stdc++.h> #define int long long using namespace std; int n,x,y; int ggg(vector<pair<char,char>>d) { int i; int co1=0,co2=0; for(auto v:d) { if(v.first=='1') co1++; else co2++; } int minn=min(co1,co2); int ans=minn*y; int co11=0,co00=0; for(i=2*minn;i<d.size();i++) { if(d[i].second=='1') co11++; else co00++; } ans+=min(co11,co00)*y; int dd=d.size()-2*min(co11,co00)-2*minn; ans+=dd*x; return ans; } signed main() { std::ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n>>x>>y; string a,b,c; cin>>a>>b>>c; a=" "+a; b=" "+b; c=" "+c; int i; vector<pair<char,char>>d,f; for(i=1;i<=n;i++) { if(c[i]=='1') { if(b[i]==a[i]) { d.push_back({a[i],b[i]}); f.push_back({b[i],a[i]}); } } else { if(a[i]!=b[i]) { d.push_back({a[i],b[i]}); f.push_back({b[i],a[i]}); } } } if(2*x<y) { cout<<d.size()*x; return 0; } sort(d.begin(),d.end()); sort(f.begin(),f.end()); cout<<min(ggg(d),ggg(f)); return 0; }