2010年下半年每周集训之个人练习赛1解题报告

2010年下半年每周集训之个人练习赛1解题报告:F题A^B==B^A-by crq

要判断A^B==B^A,可以两边取对数转化为判断BlogA==AlogB,即判断logA/A==logB/B,即判断f(x)=logx/x函数是否存在不同的x1和x2,使得f(x1)==f(x2),因此我们先找出函数f(x)=logx/x的单调区间,对f(x)求导,f'(x)=(1-logx)/x^2,显然f'(x)在x>e时有f'(x)<0,即f(x)在x>e时是单调递减的。也就是说如果x1和x2都大于e,f(x1)和f(x2)是不会相等的。由题意已知给出的输入数据是A和B中较小的一个,因此如果较小的一个都大于e,方程显然无解,输出-1。其实两个都小于e也是不可能的,因为另一边是单调递增的。

剩下的肯定是一个小于e(即输入数据,假设为A),一个大于e(输出数据,假设为B)。另外由题意给出较小的那个A要大于1.1,根据单调性质,B也是不可能>100的,取大一点也没事。因此B的大致范围是在e和100之间,你可以在这个之间进行枚举,但最好的方法是使用二分法:

start=e
end = 100
mid = (start+end)/2
while (log(A)/A != log(mid)/mid)//需考虑浮点比较问题
{
     if(log(A)/A<log(mid)/mid)
          left = mid
     else
          right= mid
     mid = (start+end)/2
}
mid就是解


为解题报告打分
暂时不评分

★★
★★★
★★★★
★★★★★
发表您的评论(若贴AC代码或发表禁止言论等违禁行为将被删除并扣除积分)

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.