小a非常喜歡204204這個數字,因為′a′+′k′=204′a′+′k′=204。
現在他有乙個長度為nn的序列,其中只含有2,0,42,0,4這三種數字
設aiai為序列中第ii個數,你需要重新排列這個數列,使得∑ni=1(ai−ai−1)2∑i=1n(ai−ai−1)2最大(公式的含義是:每個數與前乙個數差的平方的和)
注意:我們預設a0=0a0=0
第一行乙個整數nn接下來一行nn個整數,第ii個數表示aiai
輸出乙個整數,表示∑ni=1(ai−ai−1)2∑i=1n(ai−ai−1)2的最大值輸入
2輸出2 4
20說明
樣例1解釋:按(4,2)(4,2)排列是最優的,此時sum=(4−0)2+(2−4)2=20sum=(4−0)2+(2−4)2=20輸入
3輸出2 0 4
36說明
樣例2解釋:按(4,0,2)(4,0,2)排列是最優的,此時sum=(4−0)2+(0−4)2+(2−0)2=36sum=(4−0)2+(0−4)2+(2−0)2=36輸入
5輸出2 4 0 2 4
52備註:
1⩽n⩽1051⩽n⩽105,保證aiai為2/0/42/0/4中的數#include#include#includeusing namespace std;
#define n 100005
int a[n],b[n];
int main()
sort(a,a+n+1);
for(int i=0;i考點:貪心 模擬
輸入的序列其實用處不大,因為最終不需要輸出方案,我們只需要記錄下2/0/4分別出現的次數即可
乙個顯然的構造策略是首先放置4, 0, 4, 0,直到其中乙個用光。
接下來如果4多餘,那麼可以按4, 0, 4, 0, … , 4, 2, 4, 2, …(先4後2)的方法構造
如果0多餘,可以按照4, 0, 4, 0 … 4, 0, 2, 0, 2 …(先2後0)的方法構造
std中的a陣列展示了其中一種最優的構造方案
實際上此題還可以推廣到更一般的情況,也就是第乙個位置放最大的,第二個位置放最小的,第三個位置放
第二大的以此類推,這種思路寫起來也會更簡單一些
牛客寒假訓練營4 F
題目傳送門 這個題其實是一道送分題 可是我被卡在神 gai 奇 si 的e題上了,沒有時間寫這個水題了 e題是如此的神 e 奇 xin 以至於我實在是不想給它單獨寫一篇總結 不就是乙個貪心 高精 讀一遍題,稍稍畫圖看一下就知道是要你求樹上有幾對點之間的距離為偶數在稍微觀察一下就能發現,深度為奇數的節...
牛客寒假訓練營5 F
題目傳送門 又到了開心的2小時過6題三小時卡一題的環節 太菜了 qwq 這一切一切的原因是什麼呢?ta這個小 zhi 機 zhang 靈 er 鬼 tong 把這句話看丟了 首 du 見 cuo 這道題的ta就很興奮的認為這不就是乙個組合數嘛 然後就寫了半天組合數 對dp的敏銳程度還不夠 寫組合數就...
牛客寒假訓練營2020 第三場B
乙個圖上一直可以到達終點的方案數,畫出乙個符合這個方案數的圖 數字都可以用二進位制數表示,1e9 230,可以用30位二進位制數表示。所以要在圖中想辦法融入二進位制的思維,可以用邊來表示二進位制的一位。先將對角線都設為b,b有兩種方向,可看作二進位制中的 1 到達第乙個b有1種可能性,到達第二個b有...