日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LA3708墓地雕塑

發布時間:2025/6/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LA3708墓地雕塑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ? 有N個墓碑,等距離的分布在一個圓形墓地的周圍,然后又要添加m個墓碑,最后要求所有的墓碑還是等距離,添加的墓碑可以放在任意位置,問之前的N個墓碑的最少移動距離之和是多少?


思路:
? ? ? 現在我們猜想,如果之前的n個墓碑至少有一個是不動的,那么來了m個墓碑之后的所有墓碑的位置都已經固定了,現在就是看要把之前的n個墓碑都放在哪個位置,現在有一個結論就是說每個墓碑放在離他最近的位置,這樣就ok了,這么敲有兩個東西要證明
(1) 為什么至少有一個墓碑是沒有移動的(這個我還沒想好,書上說是之前的例3的中位數,那個我理解了,不過這個我沒想好怎么和他們聯系上,以后再補充.)
(2) 每個墓碑移動到最近的位置是不是會有兩個墓碑最后移動到同一個位置的時候?
? ? ? 這個我來證明下:
? ? ? 方法1 給的n,m都是<= 1000的,我們直接跑一邊驗證一下就行了。
? ? ? 方法2 是直接證明,首先對于每個墓碑去它最近的位置可以這樣算
? ? ? 比如第i個墓碑那么我們現在先在單位原上操作,最后*10000就行了
? ? pos = double(i) / n * (n + m) ://這個其實是把圓放大后i原來的實際位置
? ? tmp = abs(pos - int(pos+0.5))/(n + m):// int(pos+0.5)是放大后i的實際位置?
? ? ? 如果有兩個點的最近點在同一個點上那么就會有int(pos1+0.5) = int(pos2+0.5)?
? ? ? 也就是兩個數的四舍五入值相等,那么這兩個數的最大差是1.49999..-0.5雖然很接 ? ? ?近1,但是永遠都不可能是1,而放大的圓的每兩個點之間的距離都是1,隨意矛盾了
最后解釋下上面說的那個放大 就是之前是把一個單位圓分成n分,現在是把一個周長為(n+m)的圓分成(n+m)分,每份是1,放大后離自己最近的點就是離自己最近的整數點也就是四舍五入后的點。?




#include<stdio.h>


double abss(double x)
{
? ?return ?x > 0 ? x : -x;
}


int main ()
{
? ? int n ,m;
? ? double Ans;
? ? while(~scanf("%d %d" ,&n ,&m))
? ? {
? ? ? ? Ans = 0;
? ? ? ? for(int i = 1 ;i < n ;i ++)
? ? ? ? {
? ? ? ? ? ?double pos = i * 1.0 / n * (n + m);
? ? ? ? ? ?double now = abss(pos - int(pos + 0.5)) / (n + m);
? ? ? ? ? ?Ans += now;
? ? ? ? }
? ? ? ? printf("%.4lf\n" ,Ans * 10000);
? ? }
? ? return 0;
}



總結

以上是生活随笔為你收集整理的LA3708墓地雕塑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。