日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021牛客暑期多校训练营1 G-Game of Swapping Numbers(最优解转化+贪心) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

G-Game of Swapping Numbers

講題人做法

最優(yōu)解轉(zhuǎn)化:

考慮任意一個(gè)最優(yōu)解,我們把交換后的數(shù)字重新放回原來(lái)的位置,相當(dāng)于為每一個(gè)元素分配了它在答案中的符號(hào)。比如 A={0, 3}, B = {1, 2},最優(yōu)解符號(hào)分配是 A={-0,+3}, B={-1,+2}。

考察符合要求的解符號(hào)分配規(guī)則,其實(shí)只要滿(mǎn)足 A, B 中正號(hào)總和和負(fù)號(hào)總和相等,而 A、B 各自的正負(fù)號(hào)可以不一樣。
注意:有可能出現(xiàn)正負(fù)號(hào)和實(shí)際絕對(duì)值相反的情況,這樣如果不交換答案會(huì)更劣,我們求最優(yōu)解不會(huì)影響。轉(zhuǎn)化后的問(wèn)題和原問(wèn)題不完全相同,但是最優(yōu)解相同!!!


結(jié)論:n>2時(shí),恰好 k 步與至多 k 步是等價(jià)的,當(dāng) n>2 時(shí),A 中一定至少存在兩個(gè) + 號(hào)或兩個(gè) - 號(hào),此時(shí)如果我們交換這兩個(gè)符號(hào)對(duì)應(yīng)的數(shù),則并不會(huì)使得原問(wèn)題的解變得更劣。n=2 需要特殊判斷。

求最優(yōu)對(duì)換解:
考慮對(duì)于 AiA_iAi?AjA_jAj?,如果需要答案變優(yōu),則需要兩個(gè)區(qū)間沒(méi)有交(區(qū)間是[min?(Ai,Bi),max?(Ai,Bi)][\min(A_i,B_i),\max(A_i,B_i)][min(Ai?,Bi?),max(Ai?,Bi?)]畫(huà)畫(huà)圖即可看出),并且變優(yōu) 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; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的2021牛客暑期多校训练营1 G-Game of Swapping Numbers(最优解转化+贪心)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。