2017 百度之星 資格賽 題解
百度之星 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 百度之星 資格賽 題解