2021牛客暑期多校训练营1 G-Game of Swapping Numbers(最优解转化+贪心)

G-Game of Swapping Numbers

讲题人做法

最优解转化:

考虑任意一个最优解,我们把交换后的数字重新放回原来的位置,相当于为每一个元素分配了它在答案中的符号。比如 A={0, 3}, B = {1, 2},最优解符号分配是 A={-0,+3}, B={-1,+2}。

考察符合要求的解符号分配规则,其实只要满足 A, B 中正号总和和负号总和相等,而 A、B 各自的正负号可以不一样。
注意:有可能出现正负号和实际绝对值相反的情况,这样如果不交换答案会更劣,我们求最优解不会影响。转化后的问题和原问题不完全相同,但是最优解相同!!!


结论:n>2时,恰好 k 步与至多 k 步是等价的,当 n>2 时,A 中一定至少存在两个 + 号或两个 - 号,此时如果我们交换这两个符号对应的数,则并不会使得原问题的解变得更劣。n=2 需要特殊判断。

求最优对换解:
考虑对于 AiA_iAiAjA_jAj,如果需要答案变优,则需要两个区间没有交(区间是[min⁡(Ai,Bi),max⁡(Ai,Bi)][\min(A_i,B_i),\max(A_i,B_i)][min(Ai,Bi),max(Ai,Bi)]画画图即可看出),并且变优 2×[min⁡(Ai,Bi)−max⁡(Aj,Bj)]2×[\min(A_i,B_i) - \max(A_j, B_j)]2×[min(Ai,Bi)max(Aj,Bj)]。因此只需要将所有的 2×min⁡(Ai,Bi)2×\min(A_i, B_i)2×min(Ai,Bi)2×max⁡(Ai,Bi)2×\max(A_i, B_i)2×max(Ai,Bi)排序,依次取前 kkk 大相减取和即可。

#include<bits/stdc++.h>using namespace std;
using ll=long long;constexpr int N=200010;
int n,K;
int A[N],B[N];
int dmin[N],dmax[N];
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n>>K;for(int i=1;i<=n;i++) cin>>A[i];for(int i=1;i<=n;i++) cin>>B[i];ll ans=0;if(n==2&&(K&1)) swap(A[1],A[2]);for(int i=1;i<=n;i++) ans+=abs(A[i]-B[i]);if(n<=2) return cout<<ans<<'\n',0;for(int i=1;i<=n;i++){dmin[i]=2*min(A[i],B[i]);dmax[i]=2*max(A[i],B[i]);}sort(dmin+1,dmin+1+n,[&](int a,int b){return a>b;});//从大到小sort(dmax+1,dmax+1+n);// 从小到大ll cur=ans;for(int i=1;i<=n&&i<=K;i++) //前k大{cur+=dmin[i]-dmax[i];ans=max(ans,cur);}cout<<ans<<'\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不止代码:导弹拦截

题目描述 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。某天&#xff0c;雷达捕捉到敌国的导弹来袭。由于该系统…

对.NET Core未来发展趋势的浅层判断

经常听到园里.NET开发人员在抱怨生态不如JAVA&#xff0c;想要转JAVA&#xff0c;所谓打不过你&#xff0c;我就加入你&#xff01;杜兰特的思维方式固然是获取总冠军的一种方式&#xff0c;但是我们要关起门来问自己有没有杜兰特的实力。用开发生态来类比NBA不是特别恰当&…

AT2567-[ARC074C]RGB Sequence【dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT2567 题目大意 长度为nnn的包含三种颜色RGBRGBRGB的序列&#xff0c;mmm个限制[l,r,k][l,r,k][l,r,k]表示区间l∼rl\sim rl∼r恰好有kkk种颜色。 求方案数 1≤n≤3001\leq n\leq 3001≤n≤300 解题思路 很水的题是吧&…

牛客题霸 [字符串变形]C++题解/答案

牛客题霸 [字符串变形]C题解/答案 题目&#xff1a; 对于一个给定的字符串&#xff0c;我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格&#xff0c;就像"Hello World"一样&#xff0c;然后我们要做的是把着个字符串中由空格隔…

2021牛客暑期多校训练营1 H-Hash Function(数学+FFT)

H-Hash Function Shining_xzl大佬题解 本题答案符合题意的充分必要条件是&#xff1a;不能是任意两个数的差以及他们的因数&#xff0c;因此只需用用FFT求出这些数的差&#xff0c;记为差的集合。 从小到大考虑一个答案&#xff0c;以及答案的倍数是不是上述差的集合&#x…

priority_queue+贪心:运输(题解)

解析 不难发现每次都应合并最大的一对&#xff0c;从而使局部最优带动整体最优 sort就会很自然的想到 但是问题是合并完之后的新值可能已经不是当前最大了&#xff08;WA。。qwq&#xff09; 于是想到每次循环sort一遍&#xff0c;结果n^2logn又超时了。。。 在一位高人的指引…

【话题揭秘】某大型国有银行的敏捷落地实践

“某大型国有银行的敏捷落地实践”话题介绍银行行业是强烈依赖IT的非IT行业&#xff0c;传统金融要想打破现有局面&#xff0c;除了要解决外因&#xff0c;还要突破内部因素&#xff0c;其中一点就是技术重塑和战略手段&#xff0c;也就是常说的数字化转型&#xff0c;这也是经…

P3293-[SCOI2016]美味【主席树】

正题 题目链接:https://www.luogu.com.cn/problem/P3293 题目大意 给出一个长度为nnn的序列&#xff0c;mmm次询问给出b,x,l,rb,x,l,rb,x,l,r表示询问在[l,r][l,r][l,r]中找到一个数字aaa使得bxor(ax)b\ xor\ (ax)b xor (ax)的值最大。 1≤n,m≤2105,0≤a,b,x<1051\leq n,…

牛客题霸 [三个数的最大乘积]C++题解/答案

牛客题霸 [三个数的最大乘积]C题解/答案 题目描述 给定一个无序数组&#xff0c;包含正数、负数和0&#xff0c;要求从中找出3个数的乘积&#xff0c;使得乘积最大&#xff0c;要求时间复杂度&#xff1a;O(n)&#xff0c;空间复杂度&#xff1a;O(1)。 题解&#xff1a; 有…

震惊!温州一程序员编完八皇后吐血而亡,他的代码是什么样子?!!

解析 经典大法师&#xff08;dfs哈哈哈&#xff09; 比较关键的是每条对角线上点的坐标之和或差是相同的&#xff0c;故可以用一维数组存储其状态 这题一开始用了双层循环&#xff0c;卡掉了4个点qwq 后来发现其实因为每行只有一个皇后&#xff0c;每次单层循环枚举j就可以实…

codeforces1498 D. Bananas in a Microwave(背包+优化)

D. Bananas in a Microwave issue是fw题解 设计dp&#xff1a; 状态表示&#xff1a;fi,jf_{i,j}fi,j​表示&#xff1a;前iii个操作是否能够凑成jjj。 状态转移&#xff1a;第iii次操作枚举操作次数考虑是否凑成val\text{val}val&#xff0c;如果第i−1i-1i−1次操作也可以凑…

直播视频发布:Windows上的Linux容器和Azure混合云中的Kubernetes(k8s)

如果你还没有开始关注容器&#xff0c;那么你已经out了&#xff1b;如果你还在单机上运行容器&#xff0c;那么你out了。经过2013到2018年5年的演化&#xff0c;分化和进化&#xff1b;容器&#xff0c;Docker和Kubernetes已经是任何一家企业的IT解决方案都不能忽视的重要趋势。…

ARC122C-Calculator【乱搞,构造】

正题 题目链接:https://atcoder.jp/contests/arc122/tasks/arc122_c 题目大意 一个数对开始是(0,0)(0,0)(0,0)&#xff0c;每次可以选择一个数加一或者让一个数加上另一个数&#xff0c;求使得第一个数变成nnn的方案。步数不超过130130130。 1≤n≤10181\leq n\leq 10^{18}1≤…

牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案

牛客题霸 [将升序数组转化为平衡二叉搜索树]C题解/答案 题目描述 给出一个升序排序的数组&#xff0c;将其转化为平衡二叉搜索树&#xff08;BST&#xff09;. 题解&#xff1a; 二叉搜索树的定义&#xff1a; 二叉搜索树或者是一棵空树&#xff0c;或者是具有下列性质的二…

日志:贪心

排队接水 时间限制: 1 Sec 内存限制: 128 MB 题目描述 有n 个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为ti &#xff0c;请编程找出这n 个人 排队的一种顺序&#xff0c;使得n 个人的平均等待时间最小。 输入 第一行为n(1<n<5000)。第二行分别表示第1…

2021“MINIEYE杯”中国大学生算法设计超级联赛(1)zoto(二维数颜色)

zoto Code1 树状数组套动态开点权值线段树 效仿HH的项链&#xff0c;维护右端点&#xff0c;询问需要排序 #include<bits/stdc.h> using namespace std; template <class Tint> T rd() {T res0;char chgetchar();while(!isdigit(ch)) chgetchar();while( isdigi…

通过Microsoft Learn进行学习以提升技能

通过 Microsoft Learn&#xff0c;可以免费而且轻松有趣地学习 Microsoft 技术。Microsoft Learn的与众不同借助 Microsoft Learn&#xff0c;任何人都能按自己的学习计划和速度掌握重要的知识和概念。 使用者将能够访问培训资料、代码示例&#xff0c;以及免费试用产品。无论是…

牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】

正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出n,kn,kn,k求 ∑i11n∑i21n...∑ik1ngcd(fi1,fi2,...,fik)\sum_{i_11}^n\sum_{i_21}^n...\sum_{i_k1}^ngcd(f_{i_1},f_{i_2},...,f_{i_{k}})i1​1∑n​i2​1∑n​...ik​1∑n​gcd(fi1​​,fi2​​,.…

牛客题霸 [旋转字符串]C++题解/答案

牛客题霸 [旋转字符串]C题解/答案 题目描述 字符串旋转: 给定两字符串A和B&#xff0c;如果能将A从中间某个位置分割为左右两部分字符串&#xff08;都不为空串&#xff09;&#xff0c;并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。 例如…

震惊!递推与递归竟然可以这么编!%99的程序员都不知道!

四、归并排序&#xff08;逆序对&#xff09; (一)、归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b; 即先使…