现在的位置: 首页 > 综合 > 正文

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

2013年05月02日 ⁄ 综合 ⁄ 共 719字 ⁄ 字号 评论关闭

这样都给我过了。可见这也是到不怎么样的题目呀。其实,有些实现出来了还就真能过。

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

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

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

贴出代码:(写的不好)

#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;
}

抱歉!评论已关闭.