CodeForces

/*
1.先说下这题的思路,这题并不是难在代码,但是不太好想。正n边形的内角和为 (n-2)*180°,这个公式当时自然记得。
但是,有些别的点却是要自己想的,简述思路如下:
正n边形每个顶角的大小为 (n-2)*180/n°
对正n边形的任一顶点,除去它自己和相邻的两个顶点,该定顶点可以与剩余的 (n-3) 个顶点连成(n-3)条对角线,这些对角线可将该顶点对应的顶角分为(n-3)+1,即(n-2)个部分,每部分180/n°

于是正n边形任意三个顶点构成的角度的范围,则是从 180/n° ~ 180 * (n-2) /n°


2.为了方便输出,许多博客上的题解,都是采用固定前两个顶点,例如固定2 1,因为这样固定,目标答案所对应的角度,和第三个顶点的序号的的关系,比较容易能表示出来


3.这题还有值得一说的是,自己写的时候,突然发现WA,但是对比一下,发现没什么不同,最后才发现,是 "double angle = 180.0 / n;"这句,我忘了写.0
这里就有个提示:一般浮点数的加减乘除法一定要尤为注意,例如这题,如果我仅仅写 double angle = 180/n,它仅仅是将这部当作int型之间的除法,不会涉及到小数点,即便我定义的angle是double型,也是如此,不信可以自己尝试着输出一下 “cout << "test: " << angle << endl;”,即便是我们认为该得到小数的情况,它仍然向下取整
这点一定要尤其注意!

以及,这题还有一个略微容易WA的地方,每次循环都要更新mina,不然起不到mina取一个极大的数,来方便刷新最小值的作用



我自己敲的代码,参考自代码:
http://blog.csdn.net/Richie_ll/article/details/74938016



此外,这个博客的代码,思路巧妙,在于固定两点,暴力求解第三点(上一个博客的代码也有用到);更在于,绕过了浮点数的精度问题,因为,在此题中,180/n的效果,和a *= n的效果是一样的,所以,就可以避开所有的double型数据,直接用int型处理,省去了浮点的加减乘除,可以绕开忘记加上.0造成的错误
http://blog.csdn.net/a664607530/article/details/73826319



以及再说说下面这个blog
http://www.oyohyee.com/post/Codeforces/820B.html
本来想说它是因为,这是我看过的最好看的博客了,我指的是整个blog,感觉做得很是用心,希望当我学习网页时,也能自己做出这样一个blog
当然,最欣赏的是,他的blog里面关于ACM的干货挺多
同时也学到了一些写法:
1.#ifdef debug #endif,这是用读写文件的方式来核对输出的一个常用写法,好像其实是在入门经典看到过的,但平时没怎么用,羞愧
2.int START = clock();
  printf("Time:%.3fs.
", double(clock() - START) / CLOCKS_PER_SEC);
  这个似乎也是入门经典里面提到过的,可以得到代码运行时间
3.cin.tie(0);
  cin.sync_with_stdio(false);
  这两句是能够加快 cin cout 的速度的,在TLE时可能会用到,就不必特意换成scanf和printf了
  有关这个知识点的blog:
  http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.html
  http://blog.csdn.net/u010620604/article/details/50803163
  http://blog.csdn.net/asx20042005/article/details/7365511

  说明:
  这串代码中的"double temp = (180 * i - t * i) / 2;" 虽然好像和 180.0/n*i 不太一样,但其实化简以后,得到的结果是一样的

*/



#include <bits/stdc++.h>
const double INF = 1e9; // min angle
using namespace std;
int main()
{
	int n, a;
	while (cin >> n >> a)
	{
		double mina = INF;
		double angle = 180.0 / n;
		int mini = 0;
		for (int i = 1; i <= (n - 2); i++)
		if (fabs(angle * i - a) < mina)
		{
			mina = fabs (angle * i - a);
			mini = i;
		}
		cout << "2 1 " << 2 + mini << endl;
	}
	return 0;
}


原文地址:https://www.cnblogs.com/mofushaohua/p/7789508.html