[BZOJ1502]月下柠檬树(自适应辛普森积分)
生活随笔
收集整理的這篇文章主要介紹了
[BZOJ1502]月下柠檬树(自适应辛普森积分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1502: [NOI2005]月下檸檬樹
Time Limit: 5 Sec??Memory Limit: 64 MBSubmit: 1387??Solved: 739
[Submit][Status][Discuss]
Description
李哲非常非常喜歡檸檬樹,特別是在靜靜的夜晚,當天空中有一彎明月溫柔地照亮地面上的景物時,他必會悠閑地 坐在他親手植下的那棵檸檬樹旁,獨自思索著人生的哲理。李哲是一個喜愛思考的孩子,當他看到在月光的照射下 檸檬樹投在地面上的影子是如此的清晰,馬上想到了一個問題:樹影的面積是多大呢?李哲知道,直接測量面積是 很難的,他想用幾何的方法算,因為他對這棵檸檬樹的形狀了解得非常清楚,而且想好了簡化的方法。李哲將整棵 檸檬樹分成了n 層,由下向上依次將層編號為1,2,…,n。從第1到n-1 層,每層都是一個圓臺型,第n 層(最上面一 層)是圓錐型。對于圓臺型,其上下底面都是水平的圓。對于相鄰的兩個圓臺,上層的下底面和下層的上底面重合 。第n 層(最上面一層)圓錐的底面就是第n-1 層圓臺的上底面。所有的底面的圓心(包括樹頂)處在同一條與地面垂 直的直線上。李哲知道每一層的高度為h1,h2,…,hn,第1 層圓臺的下底面距地面的高度為h0,以及每層的下底面 的圓的半徑r1,r2,…,rn。李哲用熟知的方法測出了月亮的光線與地面的夾角為alpha。 為了便于計算,假設月亮的光線是平行光,且地面是水平的,在計算時忽略樹干所產生的影子。 李哲當然會算了,但是他希望你也來練練手Input
第1行包含一個整數n和一個實數alpha,表示檸檬樹的層數和月亮的光線與地面夾角(單位為弧度)。 第2行包含n+1個實數h0,h1,h2,…,hn,表示樹離地的高度和每層的高度。 第3行包含n個實數r1,r2,…,rn,表示檸檬樹每層下底面的圓的半徑。 上述輸入文件中的數據,同一行相鄰的兩個數之間用一個空格分隔。 輸入的所有實數的小數點后可能包含1至10位有效數字。 1≤n≤500,0.3<alpha<π/2,0<hi≤100,0<ri≤100Output
輸出1個實數,表示樹影的面積。四舍五入保留兩位小數。
Sample Input
2 0.785398163310.0 10.00 10.00
4.00 5.00
Sample Output
171.97HINT
Source
[Submit][Status][Discuss]這個題的正解是各種分類討論求面積,但是可以用辛普森積分騙分。
關于辛普森積分的推導可以看 https://www.zhihu.com/question/47728235
其實這個東西很好卡掉,但是對于很多數據還是可以較為精確地出解的。
首先發現要求的東西是軸對稱的,這意味著我們可以只求x坐標上面的函數區域沒。這個圖像的解析式還是很難求,但是對于每個橫坐標上對應的函數值可以比較輕松地求出,這個時候就可以用Simpson積分了。
普通辛普森積分根本不可能出解,因為僅僅一個二次函數不可能擬合這么復雜的圖像。但是要分成很多份的話時間復雜度又過高,這個時候就需要引入自適應:如果要對[a,b]積分,可以先對[a,b]擬合,再對[a,(a+b)/2]和[(a+b)/2,b]擬合,如果兩個相差很小則直接退出,否則繼續遞歸。
個人認為這個方法在這里可以成功很大程度是因為圖像中有很多直線圍城的區域,而自適應Simpson積分在直線積分方面的表現應該是很不錯的。
具體做法看 https://www.cnblogs.com/DaD3zZ-Beyonder/p/5676841.html
上面講的很清楚了,直接作為模板即可。
?
轉載于:https://www.cnblogs.com/HocRiser/p/8884527.html
總結
以上是生活随笔為你收集整理的[BZOJ1502]月下柠檬树(自适应辛普森积分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 命令/目录 名称 英文单词
- 下一篇: 梦到自己腿流血了是什么预兆