二分 hdu 6469 故事

2021-09-17 21:36:57 字數 1995 閱讀 4752

這是乙個極其老套的故事,無論怎樣的描述都會因為故事本身的古老而顯得陳詞濫調。這個故事究竟有多古老呢?你需要呼叫你的一切想象力,沿著時間線回溯,穿過麥田,穿過綠林,穿過那鋪著大理石的長廊,來到那金碧輝煌的宮殿大堂前,來到那體態臃腫的國王面前。你將看見那神情激動的國王,將手一揮,只留下迴盪在肅穆的大堂裡的一句話――「去吧!消滅惡龍!拯救公主!」。

好吧,其實這就是乙個勇士為拯救公主踏上討伐惡龍的征程的故事。勇士名叫wdh,此刻他正在惡魔森林裡和**怪搏鬥刷經驗呢。

可惡的**怪最大的特徵就是會**,但是它並不是無限**的。**怪有1到n種等級,第1級的**怪稱為原子怪,它不會**,被擊殺時會產生a[1]點經驗;而第k級的**怪死亡時則會**成a[k]個第k - 1級的**怪。

wdh的閃躲和攻擊技能已經滿點了(wdh不會受到攻擊),但是體力有限。他每次只能攻擊乙隻**怪,攻擊將消耗1點體力,且該**怪必死。

現在wdh遇到乙個第n級的**怪,他想知道在現有體力下最多能獲得多少經驗,但是他正忙著應付怪物呢,所以想請你幫幫他。

第一行包含n和q,表示有n種等級的**怪和q個詢問(1 <= n <= 1e5, 1 <= q <= 1e5)。

第二行包含n個整數,第i個整數表示上文意義的a[i]。(1 <= a[i] <= 1e9)

第三行包含q個整數,每個整數w表示wdh的體力值。(0 <= w <= 1e9)

輸出q行,每行乙個整數,表示在當前體力下wdh最多能獲得多少經驗。

3 32 2 2

5 7 8

【題意】:

給你一棵樹,然後知道每一層的子節點的個數,在q次詢問,給你乙個x值,回答盡可能大的

#includeusing namespace std;

typedef long long ll;

const int n = 1e5+10;

const int inf = 1e9+7;

/* 大體思路:

反面的做法,用二分列舉底層的1級怪的個數。

然後,通過往上合併來確定是否能在給定的體力值中獲取當前列舉1級怪個數。

*/ll tot, s[n],v[n],n;

//tot個數就是 n裡面實際上子節點不等於1的個數

//s[i],就是第i層

/* 因為合併的時候需要除以上一層的個數向上取整

比如,現在乙隻2級怪可以分解3只1級怪。

當我們在列舉5只1級怪的時候,我們往上走,需要消滅(5/3)=2 向上取整來往上爬。

但還存在乙個問題,就是樹鏈是可能只**乙個,這樣的話,很有可能就是n的複雜度往上爬,

所以我們需要壓縮樹鏈,tot個數就是 n裡面實際上子節點不等於1的個數。

不能盲目地爬上去,需要一點小技巧,如果不斷合併,肯定是合併成乙個節點,

最後加上 和根節點的距離

*/bool check(ll m,ll w)else

}ans = ans * s[1];

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

}return 0;

}

參考部落格:hdu - 6469 故事 (二分+預處理)

#includeusing namespace std;

typedef long long ll;

const int n = 1e6+100;

const int inf = 0x3f3f3f3f;

ll need[n],sum[n],comedown[n],a[n];

int main()

sum[1] = need[1] = 1;

for(int i=2;i<=n;i++)

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

while(q--)

if ( x >= need[n] )

int pos = 1;

ll ans = 0;

while(1)

printf("%lld\n",ans*a[1]);

}return 0;

}

hdu1669 二分多重匹配 二分

n個人分成m組,求人數最多的那一組人數的最小值。每個人肯定只能匹配乙個組,但乙個組可以匹配多個人,因此屬於多重匹配。我們設定乙個limit,表示每組最多能容納的人數。在dfs u 尋找u的匹配時,如果某一組vv的人數小於limit,那麼可以把u和vv匹配,vv已經匹配的人數 1。否則,當人數已經達到...

hdu2413 二分 二分匹配

題意 地球和外星球大戰,地球有n個飛船,外星球有m個飛船,每個飛船有自己的其實戰艦和戰艦增長率,星球於星球之間有距離,問你最少多少年地球可以打敗外星球,每個星球最多只能和乙個星球對戰.思路 題意的最後一句話告訴我們這個題目滿足二分圖,我們可以二分列舉多少年打敗,每次都重新建圖,對於h i 和 a j...

hdu 4033 二分判斷

終於有題我過了t t。剛開始jc看錯題了,以為是到各邊的距離,然後覺得蠻水的,直接以0 0 為內點,旋轉後求垂線圍成的多邊形是否是正多邊形即可。後來一看是到各頂點的距離。想了一會兒。後來用餘弦定理,二分邊長 邊長和反余弦是單調的 判斷所有構成三角形的頂角 和是否為2 pi即可。構不成三角形的話直接判...