SPOJ1440 Use of Function Arctan

终于见到什么是真正的数学题了!我的数学竞赛之魂又燃了起来!


原等式为:

arctan(1/A) = arctan(1/B)+arctan(1/C)


设arctan(1/B)=b,arctan(1/C)=c,对等式两边同时取tan并化简:

1/A = tan(b+c)

1/A = (tanb+tanc)/(1-tanb*tanc)

1/A = (1/B+1/C)/(1-1/BC)

1/A = (B+C)/(BC-1)

A = (BC-1)/(B+C)


设B=A+x,C=A+y,带入上式:

2A^2+Ax+Ay = A^2+Ax+Ay+xy-1

A^2 = xy-1

y = (A*A+1)/x


从中间开始枚举答案即可


这还不算完,最坑爹的是,source limit: 256B

B尼玛啊!!!从没见过这么奇葩的有木有!!!贡献了4次CLE有木有!!!

简化了又简化,271B= =,再把所有空格删掉,216B,AC!

#include <cstdio>
#include <cmath>
typedef long long ll;
int main()
{
    ll T,a,x;
    scanf("%lld",&T);
    while (T--)
    {
        scanf("%lld",&a);
        x=sqrt(a*a+1.0);
        while ((a*a+1)%x) x--;
        printf("%lld\n",a+a+x+(a*a+1)/x);
    }
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值