[关闭]
@Metralix 2017-04-22T16:00:52.000000Z 字数 574 阅读 689

C - Calm Down

二分


题目大意

给一个半径为R的大圆,里面有n个小圆,把这些小圆放置成和大圆均内切且相邻两个小圆相切的形式,问每个小圆的半径是多少

解题思路

二分枚举小圆半径,然后求出大圆圆心到小圆圆心的距离,根据圆心距对的角可以求出角度,即2*PI / n,根据余弦定理求出圆心距,根据圆心距判断两小圆是否相切,直到相切为止
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <queue>
  6. #include <cstdlib>
  7. using namespace std;
  8. #define clc(s,t) memset(s,t,sizeof(s))
  9. #define INF 0x3fffffff
  10. #define PI acos(-1.)
  11. int T,k,c=1;
  12. double r;
  13. int main(){
  14. scanf("%d",&T);
  15. while(T--){
  16. scanf("%lf %d",&r,&k);
  17. printf("Case %d: ",c++);
  18. double res=r*sin(PI/k)/(1+sin(PI/k));
  19. if(res!=(int)res)
  20. printf("%.10lf\n",r*sin(PI/k)/(1+sin(PI/k)));
  21. else printf("%.0lf\n",res);
  22. }
  23. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注