题目名称:放盘子
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1004
Hint中已经告诉我们赢的策略了,那么只要先手能放下一个盘子,那么就赢了。
那么,怎么确定能不能放下一个盘子呢?So easy!只要判断边心距是否大于等于盘子半径就行了。
那么问题来了,正多边形的边心距怎么求呢?
(然而我觉得这个百科写得并不好)
公式:边心距=边长的一半除以tan(PI/边数),也就是下面的b = a/2/tan(PI/n)。(PI是圆周率)
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<iostream>
using namespace std;
const double PI =4*atan(1.0);
const double eps = 1e-6;
int main()
{
int n,t;
double r,a;
scanf("%d",&t);
for(int cc=1;cc<=t;cc++)
{
scanf("%d %lf %lf",&n,&a,&r);
printf("Case #%d:\n",cc);
double b = a/2/tan(PI/n);
if(b-r>=-eps)
printf("Give me a kiss!\n");
else
printf("I want to kiss you!\n");
}
return 0;
}
*转载请注明出处