输出量
标准输出
在一天安静的日子,B先生突然决定画个角度a在他的球场上。外星人已经访问了他的领域,并留下了许多不同的几何图形。其中一个数字是正则凸n-贡(具有正则凸多边形n)。
这就是为什么B先生决定使用这个多边形。现在B先生必须找到三个不同的顶点v1, v2, v3这样的角度(在哪里v2是角的顶点,并且v1和v3躺在一边)尽可能靠近a。换句话说,价值应该是最小的可能。
如果有许多最优解,B先生应该对其中的任何一种都满意。
输入
第一行和唯一一行包含两个空格分隔的整数。n和a (3≤n≤105, 1≤a≤180)-多边形中的顶点数和所需的角度,以度数为单位。
输出量
打印三个空格分隔的整数:顶点v1, v2, v3,哪种形式。如果有多个最优解,请打印其中任何一个。顶点是从1到n按顺时针顺序排列。
实例
输入
复制
3 15
输出量
复制
1 2 3
输入
复制
4 67
输出量
复制
2 1 3
输入
复制
4 68
输出量
复制
4 1 2
注
在第一次样本测试中,正三角顶点只能生成60度,这就是为什么每个可能的角度都是正确的。
正方形顶点45或90只有度角。这就是为什么在第二次样本测试中45学位被选中,因为\x{e76f}\x{e76f}\x{e76f}45-67。其他正确答案如下:“3 1 2”、“3 2 4”、“4 2 3”、“4 3 1”、“1 3 4”、“1 4 2”、“2 4 1”、“4 1 3”、“3 1 4”、“3 4 2”、“2 4 3”、“2 3 1”、“1 3 2”、“1 2 4”、“4 2 1”。
在第三次样本检验中,相反的是,90学位被选中,因为\x{e76f}90-68\x{e76f}\x{e76f}。其他正确答案如下:“2 1 4”、“3 2 1”、“1 2 3”、“4 3 2”、“2 3 4”、“1 4 3”、“3 4 1”。
分析:此题难点在于多边形的的角度计算,以六边形为例,其角度依次为180/6*1,180/6*2,180/6*3,180/6*4,只有(n-2)个角。
#include <bits/stdc++.h>
using namespace std;
int main(){
double n;
int a,v1,v2,v3;
v2 = 1;
while(cin >> n >> a){
int flag;
double min = 180;
double num1 = 180*1.00/n;
for(int i = 3; i <= n; i++){
double num2 = (i-2) * num1;
double min1 = fabs(num2 - a);
if(min > min1){
min = min1;
flag = i;
}
}
cout << 2 << " 1" << " " << flag << endl;
}
}