windy的生日到了,為了慶祝生日,他的朋友們幫他買了乙個邊長分別為 x 和 y 的矩形蛋糕。
現在包括windy,一共有 n 個人來分這塊大蛋糕,要求每個人必須獲得相同面積的蛋糕。
windy主刀,每一切只能平行於一塊蛋糕的一邊(任意一邊),並且必須把這塊蛋糕切成兩塊。
這樣,要切成 n 塊蛋糕,windy必須切 n-1 次。
為了使得每塊蛋糕看起來漂亮,我們要求 n 塊蛋糕的長邊與短邊的比值的最大值最小。
你能幫助windy求出這個比值麼?
輸入格式:
三個整數,x y n。
輸出格式:
乙個浮點數,保留6位小數。
輸入樣例#1:
5 5 5
輸出樣例#1:
1.800000
100%的資料,滿足 1 <= x,y <= 10000 ; 1 <= n <= 10 。
solution:
本題不需要多想直接$dfs$。
首先我們假設當前的矩形長為$x$,寬為$y$,要分出$k$塊,那麼不難想到分出的一塊的長$mx$最短為$x/k$,寬$my$最短為$y/k$,而且每次切的長度一定是$mx$的倍數或$my$的倍數(很好理解,不是倍數就無法保證切出至少長$mx$的矩形或寬$my$的矩形,可以自行畫圖)。
於是我們遞迴搜尋,每次切長或者寬,在分出的兩塊中取比值的最大值,更新最大值的最小值,返回就$ok$了。
**:
#include#define il inline#define for(i,a,b) for(double (i)=(a);(i)<=(b);(i)++)
using
namespace
std;
intn,x,y;
il double dfs(double x,double y,int
k)
double ans=233333333,mx=x*1.0/k,my=y*1.0/k,t1,t2;
for(i,
1,k/2
)
return
ans;
}int
main()
P2564 SCOI2009 生日禮物
傳送 預處理 把m個區間合併成乙個大區間 按照橫座標排序即可 思路 因為我們要一段盡可能小的區間包含所有的彩帶種類,我們不防開乙個陣列,記錄當前區間內每種彩帶多有多少個,從 1,1 開始,如果當前彩帶種類1,即說明這是一條新彩帶,彩帶種類 1,當彩帶種類 m時,記錄下當前區間長度,把左端點向右移,把...
SCOI2009 生日禮物
傳送門 本來想用二分的,讀完資料之後,又發現不用了。然而需要開多乙個陣列p pp記錄顏色最近出現的位置,以便進行玄學操作 當達成目標 now en dnow end now e nd 時,if now end while l.col a l p l 因為a l co la l col a l c o...
SCOI2009 生日快樂
windy的生日到了,為了慶祝生日,他的朋友們幫他買了乙個邊長分別為 x 和 y 的矩形蛋糕。現在包括windy 一共有 n 個人來分這塊大蛋糕,要求每個人必須獲得相同面積的蛋糕。windy主刀,每一切只能平行於一塊蛋糕 的一邊 任意一邊 並且必須把這塊蛋糕切成兩塊。這樣,要切成 n 塊蛋糕,win...