首页 > 代码库 > UVa3708 Graveyard (坐标缩放)
UVa3708 Graveyard (坐标缩放)
链接:http://acm.hust.edu.cn/vjudge/problem/15133
分析:太妙了,首先把圆的周长看作1,均匀分布着n个点,然后加入m个点后总共就有(n+m)个点,那么我们把圆的周长放大到(n+m),这么做有什么好处呢?就是(n+m)个雕塑的坐标全是整数点了,相应的原来在周长为1下的n个点的坐标从i/n方法(n+m)倍,由于要移动的雕塑位置为整数所以我们可以用四舍五入来找最近的整数点(目标雕塑位置),然后再把边长缩小回1,就是在边长为1的情况下n个雕塑移动到最近目标雕塑位置的距离,把n-1个点(第0个点不移动)要移动的距离累加然后把这个距离和等比例扩大10000。
1 #include <cstdio> 2 #include <cmath> 3 using namespace std; 4 5 int main() { 6 int n, m; 7 while (scanf("%d%d", &n, &m) == 2) { 8 double ans = 0.0; 9 for (int i = 1; i < n; i++) {10 double pos = (double)i * (n + m) / n;11 ans += fabs(pos - floor(pos + 0.5)) / (n + m);12 }13 printf("%.4lf\n", ans * 10000);14 }15 return 0;16 }
UVa3708 Graveyard (坐标缩放)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。