题目链接:
ACdream 1006
题意:
题解:纯数学推导。
因为:
log2(x+y)=A
log2(x−y)=B
所以,
2A=x+y
2B=x−y
相加一下,
2x=2A+2B
所以,
x=2A+2B2=2A−1+2B−1
到这里,就分情况讨论一下,如果
A>B
,那么:
log2(x)=A−1+log2((2B−A)+1)
。
否则就是:
log2(x)=B−1+log2((2A−B)+1)
。
AC代码:
/*
* this code is made by LzyRapx
* Problem: 1006
* Verdict: Accepted
* Submission Date: 2017-06-23 15:52:35
* Time: 28MS
* Memory: 1844KB
*/
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
double A,B;
cin>>A>>B;
if(A>B)
{
printf("%.5lf\n",A - 1 + log2( pow(2.0,B - A) + 1 ));
}
else
{
printf("%.5lf\n",B - 1 + log2( pow(2.0,A - B) + 1 ));
}
}
return 0;
}