八中測試 優化延遲

2021-08-18 04:50:25 字數 1722 閱讀 7202

小ho編寫了乙個處理資料報的程式。程式的輸入是乙個包含n個資料報的序列。每個資料報根據其重要程度不同,具有不同的」延遲懲罰值」。序列中的第i個資料報的」延遲懲罰值」是pi。如果n個資料報按照<pi1, pi2, … pin>的順序被處理,那麼總延遲懲罰

sp=1*pi1+2*pi2+3*pi3+…+n*pin(其中i1, i2, … in是1, 2, 3, … n的乙個排列)。

小ho的程式會依次處理每乙個資料報,這時n個資料報的總延遲懲罰值sp為

1*p1+2*p2+3*p3+…+i*pi+…+n*pn。

小hi希望可以降低總延遲懲罰值。他的做法是在小ho的程式中增加乙個大小為k的緩衝區。n個資料報在被處理前會依次進入緩衝區。當緩衝區滿的時候會將當前緩衝區內」延遲懲罰值」最大的資料報移出緩衝區並進行處理。直到沒有新的資料報進入緩衝區時,緩衝區內剩餘的資料報會按照」延遲懲罰值」從大到小的順序被依次移出並進行處理。

例如,當資料報的」延遲懲罰值」依次是<5, 3, 1, 2, 4>,緩衝區大小k=2時,資料報被處理的順序是:<5, 3, 2, 4, 1>。這時sp=1*5+2*3+3*2+4*4+5*1=38。

現在給定輸入的資料報序列,以及乙個總延遲懲罰閾值q。小hi想知道如果要sp<=q,緩衝區的大小最小是多少?

line 1: n q

line 2: p1 p2 … pn

對於50%的資料: 1 <= n <= 1000

對於100%的資料: 1 <= n <= 100000, 0 <= pi <= 1000, 1 <= q <= 1013

輸出最小的正整數k值能滿足sp<=q。如果沒有符合條件的k,輸出-1。

5 38

5 3 1 2 4

2
這道題很容易想到通過用二分來分k值,但是我們如何判斷它是否成立呢?我們可以按照題目要求進行模擬:

他的做法是在小ho的程式中增加乙個大小為k的緩衝區。n個資料報在被處理前會依次進入緩衝區。當緩衝區滿的時候會將當前緩衝區內"延遲懲罰值"最大的資料報移出緩衝區並進行處理。直到沒有新的資料報進入緩衝區時,緩衝區內剩餘的資料報會按照"延遲懲罰值"從大到小的順序被依次移出並進行處理。
而實現的話我們則可以用優先佇列來完成,如此,便簡單了。

ac**:

#include

#include

#include

#include

#include

#include

#define n 100010

using

namespace

std;

long

long n,q;

int p[n];

int check(int k)

que.push(p[i]);

} while(que.size())

if(sum<=q)

return

1;

else

return

0;

} int main()

if(l>100000) l=-1;

printf("%lld\n",l);

return

0; }

八中 7數碼

時間限制 1 sec 記憶體限制 128 mb 注 有需要的同學可以看看八數碼問題,或許,會有更大的驚喜。有乙個4 2的方框,裡面隨機填充著0 7這8個數。每次可以交換0和它相鄰的格仔裡的數。比如 可以變換為 也可以變換為 最終希望8個數整齊地排列為 給出t組初始狀態,求出每種狀態移動到目標狀態的最...

八中足球賽

八中足球賽 description 八中在辦一次足球錦標賽,有n個隊伍參加,每個隊的編號為1到n中某個值。每個隊有個特徵值為1 2 30 1之間的整數,且各不相同 比賽在決出冠軍後就結束了 小z發現每次比賽的興奮值為兩個隊特徵值的異或值 異或可理解為不進製的二進位制加法運算 例如特徵值為2與特徵值為...

Problem 八中的廁所

problem 八中的廁所 time limit 1 sec memory limit 128 mb submit 468 solved 257 submit status web board 平面上有n個廁所 n 100 每個廁所的座標均在 10000 10000之間。其中的一些廁所之間有屎連線。...