cdoj 1018 王之新學期

2021-06-27 11:49:27 字數 1586 閱讀 4599

新的學期到來了,王早已經把整個學期全都安排好了。

整個學期一共

n 天,第

i 天安排了pi

件事情。可是就在開學的前一天晚上,王突然覺得這個整個學期安排可能不夠有趣。

乙個學期是有趣當且僅當對於任意乙個整數i(

1≤i≤

n),第

i 天的的事情數目總是等於倒數第

i 天的事情數目。

因此王必須花費一定代價改變安排使得整個學期變得有趣。

王每次操作都花費乙個代價,可以將一件事情從當天提前到昨天或者延後到明天。(第一天的事情不能提前,最後一天的事情不能延後)

請問王最小要花費多少的代價使得乙個學期是有趣的?

比如,當 n=

3,p1

=2,p

2=2,

p3=0

時,王可以先花費乙個代價將第一天的一件事延後到第二天,就變成了 p1

=1,p

2=3,

p3=0

。再花費乙個代價將第二天的一件事延後到第三天,就變成了 p1

=1,p

2=2,

p3=1

。顯然,p1=

1,p2

=2,p

3=1 是有趣的乙個學期。花費的最小代價是

2 。

乙個整數

t ,表示資料組數。(t

<

1000

接下來2×

t 行。每組資料兩行。

第一行乙個整數

n ,表示盒子的個數。(n

<

10000

)

第二行n 個整數,第

i 個整數pi

表示第i 個天的最初的事件數。(a

i<

10000

)

每組資料輸出乙個整數。表示王花費的最少代價。(如果王無論如何都不能達到目的,則輸出-1

sample input

sample output

3

20 1

31 3 2

51 0 0 0 0

-1

12

解析貪心,從兩邊往中間堆。每次比較對稱的兩個點,取小的那個作為基準。多出來部分往中間堆。

從首尾兩邊往中間掃,先比較第乙個和最後乙個,把多出來的事移到第二個(正數或者倒數),直到掃到中間。再特殊處理n的奇偶情況就可以了。

#includeusing namespace std;

#define local

typedef long long ll;

ll n,p[10010];

void readdata()

ll ans=0; ll d;

for(int i=1;i<=n>>1;i++)

if(p[i]!=p[n-i+1])

if(p[i]>p[n-i+1])

else

printf("%lld\n",(n&1)?ans:ans-d/2);

}int main()

海賊王之偉大航路

題目鏈結 思路 基本狀壓dp 看題目知道此題求的是最短哈密頓路徑,也就是一條從1到n的經過所有點的最短路徑。我們可以使用狀態壓縮,使用乙個二進位制數state代表一種狀態,state代表經過的所有點的集合。例如state 1,代表只經過1號點。state 3 二進位制為0011 代表經過1號點和2號...

海賊王之偉大航路

路飛他們偉大航路行程的起點是羅格鎮,終點是拉夫德魯 那裡藏匿著 唯一的大秘寶 one piece 而航程中間,則是各式各樣的島嶼。因為偉大航路上的氣候十分異常,所以來往任意兩個島嶼之間的時間差別很大,從a島到b島可能需要1天,而從b島到a島則可能需要1年。當然,任意兩個島之間的航行時間雖然差別很大,...

王小胖之數字轉大寫

使用場景 一般在書寫正規金額的時候都要求填寫大寫數字。實現功能 數字轉大寫功能主要實現 輸入小寫阿拉伯數字,轉換成大寫 資料例項 輸入,12345678.90 輸出,人民幣 壹仟貳佰叄拾肆萬伍仟陸佰柒拾捌元玖角 功能實現 html div class input group input name k...