1. 程式人生 > >2017 百度之星 資格賽 題解

2017 百度之星 資格賽 題解

真心 數據 targe 比較 blog png 防禦 href 普通

百度之星 2017 資格賽 題解(原創)(2~5題 第一題方法是錯的 第二題數據太水 並不會正解)

轉載請註明出處http://www.cnblogs.com/nflslzt/p/7302377.html

(題目在HDU上可以找到)

1001 度度熊保護村莊

題意 給你兩個點集,A和B,問你在B中最少選取多少個點,使得B中剩余點的凸包能將A的凸包完全包住

數據範圍 A,B中有500個點 多測 (n^3會超時)

想法

首先把兩個點集的凸包求出來

貪心:B的凸包內部點全部可以去掉

可能(就)是偽證:若最優解中B的內部取了一點,設為C,且C與D,E相連,那麽,去掉C,並在D,E之間尋找一點P(一定有點,否則是凹的),使得三角形DEP能完全包住三角形CDE即可

然後枚舉B的凸包上的一點Q,並且二分地尋找兩點M,N,使QM,QN均恰好不與A的凸包相交,繼續令Q=M,Q=N,繼續二分,這樣可以找出滿足題目要求的一個凸包. 枚舉出所有的這樣的凸包,比較即可.

錯誤原因 未考慮技術分享的情況

有沒有大神告訴我正解 據說Claris用的是O(n^3/64)的方法

1002 度度熊的王國戰略

有沒有大神告訴我正解

題意 給一個圖,求最小割

數據範圍 3000個頂點,100000條邊,邊權1000

想法

優化最大流

網搜了ISAP模板結果WA了

無聊時看看Clarifications,發現數據水

於是: 先判斷是否連通,不連通輸出0,否則枚舉每個頂點,並計算與其相連的邊的總權值,取最小值輸出

期望時間復雜度 不說了,顯然能過,顯然非正解

1003 度度熊與邪惡大魔王

題意

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。

邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。

度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。

當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p[i]-b[j],當然如果傷害小於防禦,那麽攻擊就不會奏效。

如果怪獸的生命值降為0或以下,那麽怪獸就會被消滅。

當然每個技能都可以使用無限次。

請問度度熊最少攜帶多少晶石,就可以消滅所有的怪獸。

數據範圍

1<=n<=100000

1<=m<=1000

1<=a[i]<=1000

0<=b[i]<=10

0<=k[i]<=100000

0<=p[i]<=1000

想法

一看數據範圍,怪獸1000*10種可能,而且技能使用無限制,於是這題變得特別水

預處理:暴力枚舉所有怪獸,背包算出最少要花多少晶石

輸入每一種怪獸,加起來即可

期望時間復雜度 O(1000*10*1000)

1004 度度熊的午飯時光

題意

普通的01背包,但是要求還原路徑,關鍵在於,不超過預算、不重樣、午餐等分最高的情況下,選擇菜品序號加和最小,加和相等時字典序最小的組合(限制條件太多,真心累)

數據範圍 很水

想法

01背包

然後陷入僵局

發現數據很小,隨便亂搞

於是從最後倒著推,用dfs,把所有情況搞出來,存起來,排序,輸出

(據說有人啥都不搞直接輸出過了,欲哭無淚)

期望時間復雜度 不知道

1005 尋找母串(唯一一個沒有度度熊的題)

題意

定義了一個01偏串:1、只由0和1兩種符組成; 2、在S的每一個前綴中,0的個數不超過1的個數; 3、S中0的個數和1的個數相等。

給定一個01偏串S,一個數n,問S在長度為n的所有01偏串中出現次數之和

數據範圍 1<=|S|<=100000,1<=n<=1000000000

樣例

input

2

2 10

4 10

output

1

3

樣例解釋

在第二個樣例中,長度為4的偏串共兩個1010,1100。10在1010中出現了兩次,在1100中出現了1次。所以答案是3。

想法

最後才發現,和http://blog.csdn.net/jaihk662/article/details/76737701 的想法很像,只是公式不同

如圖

技術分享

期望時間復雜度 O(1000000*40)

轉載請註明出處

2017 百度之星 資格賽 題解