数学题(Hard problem,HDU 5858)

样例给的那个0.29就是面积的比例嘛,如果知道精确的比例,乘以面积就是答案了。只不过小数点后面还有8位需要确定。。。

题目说这是一道小学奥数题,我感觉这难度怎么说也应该是初中奥数题吧。

思考了一会然后发现自己竟然连小学奥数题都不会做。

然后我就开始思考自己和小学生究竟有什么区别。

然后开始思考数学竞赛和算法竞赛究竟有什么区别。

然后觉得可以尝试用投点法来模拟出这个面积的比例。

然后跑了一分钟,得到一个小数,但是多次实验后发现只能精确到小数点后4位。

然后只好利用计算机丰富的数学库函数强行算了出来。

主要是有反余弦函数配合余弦定理,很多东西都可以强行算了。

算法竞赛和数学竞赛还是不同的。

看来我和小学生还是略有不同的。


代码

#include<stdio.h>
#include<math.h>
#define a ((5+sqrt(7))/8)
#define b ((5-sqrt(7))/8)
#define c sqrt(2*(a-b)*(a-b))
#define o1 acos(1-c*c/2)
#define o2 acos(1-2*c*c)
#define PI acos(-1)
#define A (5+sqrt(7))
#define B (sqrt(7)-5)
#define FM sqrt(A*A+B*B)
#define FZ fabs(A/2+B/2)
#define DI (FZ/FM)
#define D sqrt(a*a+b*b)
#define A1 (DI*D)
#define A2 (o1/2)
#define A3 (o2/8)
#define ANS (A3+A1-A2)
using namespace std;
double cul(int x)
{
    return x*x*ANS;
}

void solve()
{
    int N;
    scanf("%d",&N);
    printf("%.2lf\n",2*cul(N));
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--) solve();
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值