bzoj4570: [Scoi2016]妖怪【凸包+对勾函数最小值】
Description
邱老師是妖怪愛好者,他有n只妖怪,每只妖怪有攻擊力atk和防御力dnf兩種屬性。邱老師立志成為妖怪大師,于
是他從真新鎮出發,踏上未知的旅途,見識不同的風景。環境對妖怪的戰斗力有很大影響,在某種環境中,妖怪可
以降低自己k×a點攻擊力,提升k×b點防御力或者,提升自己k×a點攻擊力,降低k×b點防御力,a,b屬于正實數
,k為任意實數,但是atk和dnf必須始終非負。妖怪在環境(a,b)中的戰斗力為妖怪在該種環境中能達到的最大攻擊
力和最大防御力之和。strength(a,b)=max(atk(a,b))+max(dnf(a,b))環境由a,b兩個參數定義,a,b的含義見前
文描述。比如當前環境a=3,b=2,那么攻擊力為6,防御力為2的妖怪,能達到的最大攻擊力為9,最大防御力為6。
所以該妖怪在a=3,b=2的環境下戰斗力為15。因此,在不同的環境,戰斗力最強的妖怪可能發生變化。作為一名優
秀的妖怪訓練師,邱老師想發掘每一只妖怪的最大潛力,他想知道在最為不利的情況下,他的n只妖怪能夠達到的
最強戰斗力值,即存在一組正實數(a,b)使得n只妖怪在該環境下最強戰斗力最低。
Input
第一行一個n,表示有n只妖怪。接下來n行,每行兩個整數atk和dnf,表示妖怪的攻擊力和防御力。
1≤n≤10^6, 0<atk,dnf≤10^8
Output
輸出在最不利情況下最強妖怪的戰斗力值,保留4位小數。
Sample Input
3
1 1
1 2
2 2
Sample Output
8.0000
解題思路:
不難推出一個妖怪在環境 (a,b) ( a , b ) 下的最強戰力為 atk+dnf+dnf?k+atk/k,k=a/b a t k + d n f + d n f ? k + a t k / k , k = a / b 。
比較容易想到二分答案加上解一元二次方程判是否有解的方法,但是會TLE。
不妨把一個妖怪看作平面上的點 (x,y) ( x , y ) ,那么在點 (x,y) ( x , y ) 處的斜率為 k(k<0) k ( k < 0 ) 的直線得到的答案為橫縱截距之和,即 x+y?x?k?y/k x + y ? x ? k ? y / k
這樣可以很好的契合原式,再根據對勾函數性質,如果單獨使點 (x,y) ( x , y ) 最小,得到的答案為 x+y+2?sqrt(xy) x + y + 2 ? s q r t ( x y )
考慮求出這n個點的凸包,那么最大的答案永遠在凸包上,而且每個點作為最大值都有一個斜率k的取值范圍,所以我們只需求出每個點在這個區間內的最小值即可。
如果單獨使點i最小的同時,也使得點i是所有點的最大值,即斜率 ?sqrt(y/x) ? s q r t ( y / x ) 的直線可以與點i相切時,則用 ?sqrt(y/x) ? s q r t ( y / x ) 更新答案,否則,用這個點所連的兩邊的斜率計算的較小值更新答案。
所以這道題還是比較有思維難度的。
總結
以上是生活随笔為你收集整理的bzoj4570: [Scoi2016]妖怪【凸包+对勾函数最小值】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北美中小学生实用学习网站推荐
- 下一篇: 爱奇艺内容中台数据中心的设计与实现