螞蟻是勤勞的動物,他們喜歡挑戰極限。現在他們迎來了乙個難題!螞蟻居住在圖書館裡,圖書館裡有大量的書籍。書是形狀大小質量都一樣的矩形。螞蟻要把這些書擺在水平桌子的邊緣。螞蟻喜歡整潔的布置,所以螞蟻規定書本必須水平擺放,寬必須平行於桌緣(如圖),而且不允許同一高度擺多本書。
螞蟻想要讓書本伸出桌子邊緣盡量遠,同時不讓書因為重力垮下來。它們已經用不知道什麼方法測出了書的長度\(m\)(如圖)。如果總共有\(n\)本書,請你幫忙計算如何擺放使得最多水平伸出桌緣多遠。你不用考慮螞蟻用什麼方法搭建這堆書。
如果某本書以上的所有書的重心的豎直射影不在這本書上,或者正好落在在這本書的邊界上,那麼這堆書是不穩定的,會因為重力而垮下來。
注意:不考慮地球自轉,重力係數也不因高度改變;
書是質量均勻,質地堅硬的理想二維物體;
在不會垮的前提下,每本書的位置座標可以是任意實數。
輸入檔案僅含一行,兩個正整數\(n\)和\(m\),表示書本數和書本長度。
輸出僅包含一行,整數\(l\),表示水平延伸最遠的整數距離 (不大於答案的最大整數,詳見樣例)
1 100
49
2 100
74
\(10\%\)的資料中\(n\leq5\);
\(20\%\)的資料中\(n\leq10^3\);
\(40\%\)的資料中\(n\leq10^7\);
\(100\%\)的資料中\(n\leq10^\);答案\(\leq10^6\)。
設\(f_i\)表示\(i\)本書達到最大位置時最下方的書與最上方的書的中點的距離。顯然,\(f_1=0\)。
那麼先考慮怎麼通過\(f\)的前\(i\)個值計算出\(f_\)。
記\(f\)的字首和為\(g\),那麼前\(i\)本書的總重心與最上方的書的中點的距離是\(\frac\)。而要保證伸出的距離最長,顯然應該讓上面\(i\)本書的總重心落在第\(i+1\)本書的邊緣上。這樣就會發現,\(f_=\frac+\frac\)。這樣,我們就可以遞推計算答案了。
但是,\(n\)是\(10^\)級別的,這樣的遞推公式沒法滿足我們,我們首先得將\(g\)消去。
考慮到\(g_i=g_+f_i\),\(f_i=\frac}+\frac\),將他們代入上式。
\[f_=\frac+\frac}+\frac}+\frac=\frac}+\frac}+\frac=\frac}+\frac+\frac=f_i+\frac
\]這樣,我們就有了用\(f_i\)求\(f_\)的方法,也就知道了\(f_i=\sum_^\frac\),而我們要求的\(n\)本書的最長延伸距離恰好就等於\(f_\),也就是\(m\cdot\sum_^\frac\)。我們只需要快速求出正整數的倒數和,就可以快速計算\(f\)了。
至於如何求正整數的倒數和呢?當\(n\leq10^7\)時,我們可以\(o(n)\)暴力求解,然而\(n\)更大的話就會超時。但同時我們可以注意到,答案不超過\(10^6\),相當於我們只要求出答案的前\(6\)位有效數字即可,於是我們可以借助尤拉常數計算,如下:
\[\gamma=\lim_\sum_^\frac-\ln(n)
\]於是當\(n\)很大時,我們可以用\(\ln(n)\)和\(\gamma\)相加求出正整數的倒數和的近似值。至於\(\gamma\)具體是多少,可以通過暴力計算\(\sum_^\frac\)與\(\ln(10^9)\)的差得出近似值,大約是\(0.57721566\)。
吐槽:這題不知道尤拉常數就做不了啊(雖然尤拉常數基本可以當成乙個常識了)……不知道的人就算推出倒數和的形式也搞不出來啊……
\(code:\)
#include #include #include #include #include using namespace std;
#define ll long long
ll n;
int m;
int main()
else
}
紀中集訓2019 11 05
題目鏈結 有 n 個點,求 n 1 個完美匹配,且其中不出現相同的邊。n le 10 3 打暴力 手玩找到規律。把匹配放到方格圖上,給屬於同乙個完美匹配的方格染上同樣的顏色,發現兩個性質 最後一列第一行填 n 之後往下從小到大填完偶數,再從小到大填完奇數 forall i in 1,n 1 從 1,...
紀中集訓 遊戲
題目鏈結 是紀中的題,不過我已經沒有紀中的號了,於是翻出了我的古早部落格 複習的時候又做了一遍,還是想了一會兒的,並且由衷地覺得這真是一道好題。考慮 sg 函式遞推。由於每次操作只能動最後一行和最後一列,那麼設 sg i,j 表示以 i,j 結尾的矩陣的 sg 函式值。轉移有 sg i,j mex ...
紀中集訓2019 3 21 橋
描述 有 m 條河,每條河的兩邊有居民點,所以共有 m 1 排居名點 如果要從一排居名點到另一排相鄰的居民點需要過河 現在有 n 個人,每個人的起點座標是 p s 終點 q t 你可以在每條河上修建一座橋,過河必須通過橋 相鄰居民點距離為 1 不考慮過河的時間 問 n 個人到終點的路徑之和最小是多少...