注意,該測試位址中的式子寫錯了,應該是d=0.3*(v-v0)^0.5(也就是d=0.3*sqrt(v-v0)),漏了乙個^0.5,看得我不明所以...找到了原題才知道少了個根號。
做法:設分成s塊,要求總長w=sd最大,化一下式子:
w=sd=s*0.3*sqrt(v總/s-v0)=0.3*sqrt(v總s-v0s^2)
注意到根號內的式子(v總s-v0s^2)是乙個關於s的二次函式,這個式子越大,w就越大,所以問題轉化為求二次函式(v總s-v0s^2)取最大值時s的取值,由於二次項係數小於0,所以函式在頂點處取
最大值,由初中的數學知識得bests=v總/(2*v0)。然而,bests可能不是整數,而問題要求整數解,由二次函式的圖象可知,離頂點橫座標越接近的點的函式值越大,
所以我們就比較bests與其向下和向上取整的整數之間的差的絕對值,與哪個的差值小就選哪個作為真正的bests,如果差值相等,說明有兩個整數最優解,按照題目要求輸出0。還要注意一點,如果在s=bests時函式值為負數,這種情況是無解的,因為原式沒有意義。
所以總歸來說這題還是很水的......完全是初中知識嘛,寫起**來也是只有20多行,多年前的noi果然水啊。
以下是本人**:
#include #include #include #include #include #define e 1e-7
using namespace std;
double vt,v0,best,c,ans;
int main()
{ scanf("%lf%lf",&vt,&v0);
best=vt/(2*v0);
c=(int)best+0.5;
if (fabs(best-c)
NOI2007T4 項鍊工廠 線段樹 座標變換
做法 之前沒想出座標變換的規律性,於是用splay做,寫了300 行,慘跪.現在回來一想,這不就是道線段樹嘛!結果換線段樹後只有200行左右,果然線段樹還是區間處理的大殺器。我們設乙個座標的對映序列s,s i 就是當前標號為i的珠子最原始的標號,我們發現無論怎麼旋轉 翻轉,這個序列都是乙個環序列,即...
NOI1997 Day2 T1 最佳遊覽
noi1997 day2 t1 最佳遊覽 time limit 1000ms memory limit 65536k total submit 219 accepted 112 description input 第一行是兩個整數m和n,之間用乙個空格符隔開,n表示旅遊城南北向林萌道的條數,m表示東...
NOI2006 Day2 T1 最大獲利
noi2006 day2 t1 最大獲利 time limit 20000ms memory limit 65536k total submit 66 accepted 41 case time limit 2000ms description 新的技術正衝擊著手機通訊市場,對於各大運營商來說,這既...