@Metralix
2017-04-23T00:00:52.000000Z
字数 574
阅读 767
二分
题目大意
给一个半径为R的大圆,里面有n个小圆,把这些小圆放置成和大圆均内切且相邻两个小圆相切的形式,问每个小圆的半径是多少
解题思路
二分枚举小圆半径,然后求出大圆圆心到小圆圆心的距离,根据圆心距对的角可以求出角度,即2*PI / n,根据余弦定理求出圆心距,根据圆心距判断两小圆是否相切,直到相切为止
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdlib>
using namespace std;
#define clc(s,t) memset(s,t,sizeof(s))
#define INF 0x3fffffff
#define PI acos(-1.)
int T,k,c=1;
double r;
int main(){
scanf("%d",&T);
while(T--){
scanf("%lf %d",&r,&k);
printf("Case %d: ",c++);
double res=r*sin(PI/k)/(1+sin(PI/k));
if(res!=(int)res)
printf("%.10lf\n",r*sin(PI/k)/(1+sin(PI/k)));
else printf("%.0lf\n",res);
}
}