2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 G. Finding the Radius for an Inserted Circle

来源:互联网 发布:软件产品出口退税政策 编辑:程序博客网 时间:2024/05/20 08:22

题目链接:https://nanti.jisuanke.com/t/17314

题目大意:求第k个圆的半径(向下取整)

解题思路:直接列方程求解,因为未知量是一次的,可以直接求
(sqrt(3)R-R-R’)^2=(R+R’)^2-R^2,(sqrt(3)R-R-2R’-R”)^2=(R+R”)^2-R^2,(sqrt(3)R-R-2R’-2R”-R”’)^2=(R+R”’)^2-R^2,依次求R,再推出下一个R

AC代码:

#include<cstdio>#include<cmath>using namespace std;const int MAXN = 15;double ans[MAXN];int main(){    for (int l;scanf("%d", &l)==1&&l!=-1;)    {        double R;scanf("%lf", &R);        int tot = 0;        double x = (sqrt(3.0) - 1)*R;        for (int i = 1;i < MAXN;i++)            ans[i] = x*x / 2 / (x + R), x -= 2 * ans[i];        for (int j = 1;j <= l;j++)        {            int k;scanf("%d", &k);            printf("%d %d\n", k, int(ans[k]));        }    }    return 0;}
阅读全文
0 0
原创粉丝点击