Graveyard LA3708
白书第一章例题4
思维。
先固定一点不动,假设最后一共N个点,那么编号为0,1,...N-1,
0不动,原来的n个点分别占据i/n*N的位置(记为pos),移动到pos四舍五入的位置即可。
证明一:有一个坐标未移动,见例题3(UVA11300)
证明二:没有点移动到相同位置。
假设x,y移动到相同位置,那么他们的pos四舍五入相同,最多差0.9999,小于1.但是根据我们的做法,移动前坐标相差大于一,故不可能。
#include<cstdio> #include<cmath> using namespace std; 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 = abs(pos - int(pos + 0.5)) / (n + m); Ans += now; } printf("%.4lf\n" ,Ans * 10000); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步