CodeForces - 960B:Minimize the error(優先佇列+貪心)
連結:https://vjudge.net/problem/CodeForces-960B
題意
輸入第一行的三個數字分別代表:n(每組各有n個數字,共有2組),k1(對第一組的操作次數),k2(對第二組的操作次數)。
所謂操作就是對一個數字進行 +1 或 -1 。
操作k1+k2次之後對兩個陣列進行以下操作:
for(int i=0;i<n;i++)
sum+=(a[i]-b[i])*(a[i]-b[i]);
求這個sum的最小值。
思路
狀態不是很好,主要是自己作了一個死(沒想到會出現那種東西,就整個人A完題還是濛濛的),所以導致精神不是很好,但還是順利A掉了。
我們先將對A,B陣列的操作轉移到一個陣列上面去:儲存A、B對應位置相減的絕對值的陣列C。這個時候操作次數就是k1+k2了。
然後再想,怎麼操作才會使結果最小呢?
其實我們的每次操作(無論對A還是B,無論是+1還是-1)都是讓C[i]減小。
這樣的話我們每次都讓差的絕對值最大的那個減1,這樣就能有效減小最終結果的值。
不要以為這就結束了,發問:如果此時C陣列裡全都是0,還剩下一些操作次數,怎麼辦?
(題目中要求是k1,k2全部用完哦`(∩_∩)′)
很簡單,讓C[0]加1,下一次最大的就是這個1,然後再讓它減1,重複此操作即可。
由於我們每一次都要讓最大的數-1,所以需要保持有序性。
這裡用的是優先佇列,建立一個降序的優先佇列q,儲存A、B對應位置相減的絕對值,替代C的存在。
直接看程式碼,伊麗莎白!
程式碼
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; //坑1:開long long
const int maxn=1e6+100;
ll a[maxn];
int main()
{
ll n,k1,k2,b,tmp;
priority_queue <ll,vector<ll>,less<ll> > q;
cin>>n>>k1>>k2;
for(int i=0; i<n; i++)
cin>>a[i];
for(int i=0; i<n; i++)
{
cin>>b;
a[i]=abs(a[i]-b);
q.push(a[i]);
}
ll ss=k1+k2;
while(ss--)
{
tmp=q.top();
q.pop();
q.push(abs(tmp-1)); //這一步你細品,細品(想一下q裡全為0,ss!=0的時候就明白了)
}
ll sum=0;
while(!q.empty())
{
tmp=q.top();
q.pop();
sum+=tmp*tmp;
}
cout<<sum<<endl;
}
編劇真的就是腦洞開花了,導演也不管,那種東西都拍的出來,我真的是裂開!
溜了溜了~~
相關文章
- 8.13(優先佇列貪心維護+打表找規律+對頂堆優先佇列+DFS減枝+貪心dp)佇列
- Sunscreen POJ - 3614(防曬油) 貪心-優先佇列佇列
- [USACO 2009 Feb Gold] Fair Shuttle (貪心+優先佇列)GoAI佇列
- PHP優先佇列PHP佇列
- HDU - 6003 Problem Buyer題解(貪心選擇演算法,鴿巢原理,優先佇列維護)演算法佇列
- codeforces round 974(div.3)E(優先佇列實現dijstra演算法,devc++的優先佇列用greater報錯)佇列JS演算法devC++
- STL 優先佇列 用法佇列
- 淺談優先佇列佇列
- 堆與優先佇列佇列
- 優先佇列和堆排序佇列排序
- 01揹包優先佇列優化佇列優化
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- 棧,佇列,優先順序佇列簡單介面使用佇列
- NO GAME NO LIFE(優先佇列/最小堆)GAM佇列
- 優先佇列的比較器佇列
- 封裝優先順序佇列封裝佇列
- codeforces 1428E. Carrots for Rabbits(貪心(非常優秀的貪心題),結構體過載運算子)結構體
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- STL優先佇列最小堆最大堆佇列
- leetcode621——優先佇列的思路LeetCode佇列
- 演算法面試(三) 優先佇列演算法面試佇列
- 二叉堆實現優先佇列佇列
- 手擼優先佇列——二叉堆佇列
- C++ STL 優先佇列 (priority_queue)C++佇列
- .NET 6 優先佇列 PriorityQueue 實現分析佇列
- Java優先順序佇列DelayedWorkQueue原理分析Java佇列
- 堆、堆排序和優先佇列的那些事排序佇列
- 最詳細版圖解優先佇列(堆)圖解佇列
- 【堆】【優先佇列】[NOIP2004]合併果子佇列
- Facebook的分散式優先順序佇列FOQS分散式佇列
- 【Dijkstra演算法】未優化版+優先佇列優化版演算法優化佇列
- Educational Codeforces Round 167 (Rated for Div. 2) D(dp,貪心)
- CSP之公共鑰匙盒(模擬、排序、優先佇列)排序佇列
- Python3 執行緒優先順序佇列( Queue)Python執行緒佇列
- MaxHeap 最大堆 MinHeap 最小堆 PriorityQueue 優先佇列實現佇列
- 貪心:Codeforces Round #674 (Div. 3) E Rock, Paper, Scissors s
- 【力扣】最大子陣列和(貪心)力扣陣列
- 遞推,遞迴,貪心,列舉思想遞迴