您的位置:首页 > 其它

《算法竞赛-训练指南》第一章-1.4_LA 3708

2013-07-16 22:07 1086 查看
这样都给我过了。可见这也是到不怎么样的题目呀。其实,有些实现出来了还就真能过。

这道题目的思想就是,以一个已经建立的坟墓做为公共的起点,然后移动墓地雕像的时候,

就每次逼近比较,如果是每次逼近的时候距离在减小,那么可以,继续逼近,一旦出现逼近过头了,并且结果

比你不过头的时候还大,那就停止吧,就要这个结果吧。然后就是暴力解决。直到解决完所有的雕像。

贴出代码:(写的不好)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <string>

using namespace std;

const double PI = 3.141592653;

int N, M;

double start;

double end;

int main()
{
while (scanf("%d%d", &N, &M) != EOF)
{
start = 2 * PI / N; //开始的时候每个雕像相差的角度
end = 2 * PI / (M + N); //加入心的雕像的时候每个雕像所差的角度
double sum = 0;
double temp = start; //开始的时候的角度.
for (int i = 0; i < N - 1; i++)
{
double flag = end;
double buf = 1e16; //来一个大一点的double
while (fabs(temp - flag) < buf) // 逐渐逼近,出现不满足的时候立刻终止.
{
buf = fabs(temp - flag);
flag += end;
}
temp += start;
sum += buf;
}
printf("%.4lf\n", (sum / (2 * PI)) * 10000);

}
//	system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: