博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVAlive 3708 Graveyard(最优化问题)
阅读量:7078 次
发布时间:2019-06-28

本文共 840 字,大约阅读时间需要 2 分钟。

题目描述:

   

在周长10000的圆上,初始等距的放置着n个雕塑,现在新加入m个雕塑,要使得这n+m个雕塑仍然等距,问原来n个雕塑要移动的距离总和的最小值.

原题地址:

分析:将原有的每个雕塑的坐标位置,映射在一个总长为n+m的数轴上,设第一个点的坐标为0,(新的等分点必然有至少有一个和原来n等分的等分点重合,因为等分点可以等距的绕圆周旋转,总可以转到有至少一个重合的,不妨就让这个重合的点是坐标为0的点)从0到n+m-1的每个整数端点为添加雕塑之后每个雕塑的正确位置。pos[i]代表原来的第i个点在新数轴上的坐标,i/n是在总长为1的线段上n等分的第i个点所占的比例,那么在总长为n+m的线段上它的坐标pos[i]=i/n*(n+m).由于第一个雕塑的坐标保持为0,从第二个雕塑开始枚举,判断当前雕塑的坐标距离哪个整数的端点最近(用四舍五入判断,这又是比较精彩实用的技巧),较近的这段距离,即为它所需要移动的距离,用一个变量来累加结果。在这里不可能出现两个雕塑都距离同一个整数端点较近的情况,因为现在有

m+n 个雕塑,每个雕塑之间的间隔为1,而之前只有 n
个雕塑,那么之前的雕塑之间的间隔一定大于1,所以不可能都靠近同一个整数端点。最后将总的移动距离ans转化为在周长为10000的圆上,用
ans/(m+n)*10000 即可。

这道题得注意一个问题,第十三行的floor改成double会WA,我也不知道为啥,搞不清楚!有大神知道的给我留个言,在下面评论一句,不甚感激!

下面给出AC代码:

1 #include 
2 using namespace std; 3 int main() 4 { 5 double n,m; 6 double ans; 7 while(scanf("%lf%lf",&n,&m)!=EOF) 8 { 9 ans=0.0;10 for(int i=1;i

 

转载地址:http://uxpml.baihongyu.com/

你可能感兴趣的文章
为 Koa 框架封装 webpack-dev-middleware 中间件
查看>>
深入浅出JavaScript:理解函数
查看>>
将群晖 NAS 安全地暴露到公网中
查看>>
【二次元的CSS】—— 用 DIV + CSS3 画咸蛋超人(详解步骤)
查看>>
Android程序逆向分析
查看>>
在阿里云centOS环境下搭建基于thinkphp的网站
查看>>
RegEx 快速掌握最基本的正则语法
查看>>
过去的2015年
查看>>
Webpack + React 开发之路
查看>>
【译】使用 AngularJS 和 Electron 构建桌面应用
查看>>
【经验总结】记一次艰难的居中--日历榜单
查看>>
所有博客将会誊到http://www.xumenger.com/
查看>>
Jodd 5.0.8 发布,Java 常用工具包
查看>>
某网页数据爬取记录
查看>>
GoLand 2019.1 Beta 发布,重要里程碑
查看>>
浅谈SAP Cloud for Sales 自动化
查看>>
舍弗勒为自动驾驶做出准备,L4/L5级智能转向与线控技术 | 2019上海车展 ...
查看>>
阿里云文件存储NAS跨VPC挂载
查看>>
(三) Docker安装使用 镜像
查看>>
Flutter WebView与JS交互简易指南
查看>>