靈能傳輸 貪心,字首和

2021-10-20 18:13:52 字數 2447 閱讀 2254

題目鏈結

在遊戲《星際爭霸 ii》中,高階聖堂武士作為星靈的重要 aoe 單位,在遊戲的中後期發揮著重要的作用,其技能」靈能風暴「可以消耗大量的靈能對一片區域內的敵軍造成毀滅性的傷害。

經常用於對抗人類的生化部隊和蟲族的刺蛇飛龍等低血量單位。

你控制著 n 名高階聖堂武士,方便起見標為 1,2,⋅⋅⋅,n。

每名高階聖堂武士需要一定的靈能來戰鬥,每個人有乙個靈能值 ai 表示其擁有的靈能的多少(ai 非負表示這名高階聖堂武士比在最佳狀態下多餘了 ai 點靈能,ai 為負則表示這名高階聖堂武士還需要 −ai 點靈能才能到達最佳戰鬥狀態)。

現在系統賦予了你的高階聖堂武士乙個能力,傳遞靈能,每次你可以選擇乙個 i∈[2,n−1],若 ai≥0 則其兩旁的高階聖堂武士,也就是 i−1、i+1 這兩名高階聖堂武士會從 i 這名高階聖堂武士這裡各抽取 ai 點靈能;若 ai<0 則其兩旁的高階聖堂武士,也就是 i−1,i+1 這兩名高階聖堂武士會給 i 這名高階聖堂武士 −ai 點靈能。

形式化來講就是 ai−1+=ai,ai+1+=ai,ai−=2ai。

靈能是非常高效的作戰工具,同時也非常危險且不穩定,一位高階聖堂武士擁有的靈能過多或者過少都不好,定義一組高階聖堂武士的不穩定度為 maxni=1|ai|,請你通過不限次數的傳遞靈能操作使得你控制的這一組高階聖堂武士的不穩定度最小。

本題包含多組詢問。輸入的第一行包含乙個正整數 t 表示詢問組數。

接下來依次輸入每一組詢問。

每組詢問的第一行包含乙個正整數 n,表示高階聖堂武士的數量。

接下來一行包含 n 個數 a1,a2,⋅⋅⋅,an。

輸出 t 行。

每行乙個整數依次表示每組詢問的答案。

資料範圍

1≤t≤3,3≤n≤300000,|ai|≤109,

每個評測用例的限制如下:33

5 -2 3

40 0 0 0

31 2 330

334-1 -2 -3 7

42 3 4 -8

5-1 -1 6 -1 -157

4樣例解釋

樣例一對於第一組詢問:

對 2 號高階聖堂武士進行傳輸操作後 a1=3,a2=2,a3=1。答案為 3。

對於第二組詢問:

這一組高階聖堂武士擁有的靈能都正好可以讓他們達到最佳戰鬥狀態。

這題有點難

運用了字首和的思想

a[i]釋放能量給左右(a[i-1],a[i],a[i+1])->(a[i-1]+a[i],-a[i],a[i+1]+a[i])

轉換後字首和 (s[i-1],s[i],s[i+1])->(s[i],s[i-1],s[i+1])

然後我們排序字首和,相鄰兩兩之差的最大值,就是所以情況中最大值的最小值

但是我們這題第乙個點和最後乙個點時不能動的,所以我們要去除錯,從s0到sn的路線.這裡的路線參考 鏈結

然後補充一下為什麼要跳兩個去選,因為從s0到最小值再從最小值到sn這段是有重疊的,如果我們乙個乙個遍歷,從最小值返回到s0後面的時候,記錄s0後面的那個數時,我們算的差值就變成了a[s0+1]-最小值,值是不對的,所以這裡我們採取兩個兩個遍歷,從最小值到sn的時候再乙個乙個遍歷,這樣就可以了

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int maxn=

3e5+5;

int n;

ll a[maxn]

;ll s[maxn]

;bool vis[maxn]

;int t;

intmain()

ll s0=s[0]

,sn=s[n];if

(s0>sn)

swap

(s0,sn)

;sort

(s,s+n+1)

;for

(int i=

0;i<=n;i++)}

for(

int i=n;i>=

0;i--)}

memset

(vis,0,

sizeof

(vis));

int l=

0,r=n;

for(

int i=s0;i>=

0;i-=2

)for

(int i=sn;i<=n;i+=2

)for

(int i=

0;i<=n;i++

) ll res=0;

for(

int i=

1;i<=n;i++

) res=

max(res,

abs(a[i]

-a[i-1]

)); cout<}}

HDU5976 貪心 逆元 字首和

大連區域賽的銅牌題,雖然只是銅牌題我也想了好一會,感覺這場區域賽挺不好打呀。貪心策略我是這樣想出來的,先令n 25把,寫成34567乘積最大,假如n被迫變小呢?34567 24567 23567 23467 23456,這樣最划算對吧,那麼接下來?23456 3457,因為長度被迫 1了,and t...

最大子矩陣 字首和 貪心

給定乙個包含整數的二維矩陣,子矩形是位於整個陣列內的任何大小為1 1或更大的連續子陣列。矩形的總和是該矩形中所有元素的總和。在這個問題中,具有最大和的子矩形被稱為最大子矩形。例如,下列陣列 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩形為 9 2 4 1 1 8 它擁有...

貪心 中位數 字首和 差分

1.紙牌問題 貪心 洛谷 p1031 均分紙牌 單次運算元為任意數 2.環形紙牌 中位數,字首和 codevs1485 七夕祭 洛谷p2512 haoi2008 糖果傳遞 單次運算元為1 一定存在兩個人不交換的最優解 於是我們環拆鏈 3.區間問題 poj3614 洛谷 p2887 sunscreen...