所以我的解法就是把两个人的解法结合了起来,虽然没有大佬那么牛,但还是想发一篇题解记录一下!!!
解题思路
利用结构体分别存储早上和晚上的甜蜜值
先假设晚上把巧克力全部吃完,
然后将早上甜蜜值减去晚上甜蜜值,从大到小排序,看哪个差值更大,说明早上吃更划算
最后根据排序替换掉前k个本应该在早上吃的
代码
#include<bits/stdc++.h> using namespace std; struct ren { long long int x; //存早上甜蜜值 long long int y; //存晚上 }a[100010]; bool cmp(ren xx,ren yy) { return xx.x-xx.y>yy.x-yy.y; //早上与晚上甜蜜值差值的排序 } int main() { long long int n,k,i,su=0; cin>>n>>k; for(i=0;i<n;i++)cin>>a[i].x; for(i=0;i<n;i++){cin>>a[i].y;su+=a[i].y;} sort(a,a+n,cmp); for(i=0;i<k;i++)su+=(a[i].x-a[i].y); //替换,因为su已经包含了晚上全部的,再加上差值就是早上的甜蜜值 cout<<su; }