uva1388
題意:乙個周長為10000的圓上均勻分布n個雕塑,現在再插入m個雕塑,希望n+m個雕塑也能在這個圓上均勻分布。可能需要移動原有的一些雕塑。問:n個雕塑最小移動的總距離是多少。
思路:首先需要找到原有的n個雕塑在插入m個雕塑後,它們每個的位置。n個雕塑的移動選乙個參考點,這個參考點是不動的。所以可以把它看成數軸上的原點。第i個點的位置就是i/n(未移動時),新增了m個雕塑後,相當於把這個數軸變成了n+m,第i個點的位置就是**(i / n) * (n+m)了(未移動)。新增了m個雕塑後每個點都需要分布在i / (n+m)上**,我們需要做的就是找到這n個點各自最近的i / (n+m)的點,這樣移動的距離也就最小了。這當中又涉及到了是否會重複以及是否會有乙個點不需要移動。(後兩個問題在劉汝佳藍書上有解答)
#include#include#includeusing namespace std;
int main()
{ double n,m;
while(scanf("%lf%lf",&n,&m)!=eof)
{ double ans=0;//移動的距離總和
for(int i=1;i如有錯誤還請斧正
劉汝佳書 例題4 4 UVA213
2019.3.28 這道題沒改直接ac!skr 感覺有點 自頂向下 的感覺了,沒有看書上的解法,但寫出來是差不多的 跟書上一樣用了二維陣列,比書上少寫了兩個子函式,用時更久 所用資料結構 二維陣列,編碼方式大概如下 000 01 10 000 001 010 011 100 101 110 我的解法...
劉汝佳書 例題4 5 UVA512
2019.3.29 讀了書上的 1 模擬法 思想 二維陣列d中存放每個格仔的原始序號 i 10000 j 如 10001代表這個格仔最開始在1行1列 20003代表這個格仔最開始在2行3列 因此,二維陣列d的初值如下 10001 10002 10003 20001 20002 20003 30001...
劉汝佳書 習題3 4 UVA455
uva刷題方法 2019.3.24 這道題注意pe錯誤 最後乙個輸出後沒有換行 貌似最後多了換行是wa錯誤,懵逼 三層迴圈 最外層迴圈是 i從1到strlen s 第二層迴圈是 j從第0個週期的第1個數字到第0個週期的最後乙個數字 最內層迴圈是 k從第0個週期到最後乙個週期 思路是 遍歷每一種週期數...