这题出自codeforces,链接:https://codeforces.com/gym/102638/problem/A
昨天这题是一个经典的方程求解问题,等式成立的前提也就是
题目当中已经明确说了,方程的根只有一个,并且是整数。
我们观察一下方程,它的指数是奇数,这样的方程的图像类似于下面这张图,也就是说大部分x有意义的域当中,都是递增的,而不是二次方程那样递增和递减对半开的抛物线。
再加上题目当中明确的表示只有一个方程为0的根,那么说明和x轴的交点发生在递增的区间内。实际上我们可以代入两个x尝试一下,很快就可以发现,这个解应该在100到300的区间内。那么剩下的就很简单了,我们只需要使用二分法,很容易找到解。
import math
def get_value(x):
return pow(math.sqrt(x-3) - pow((3*x + 2)/2, 1/3), 7) - pow(x - math.sqrt((x*x - 1984)/5), 3)
l, r = 100, 300
while r - l > 1:
m = (l + r) // 2
v = get_value(m)
if v > 0:
r = m
else:
l = m+1
print(l)
最后得到的结果是228.
有两个人分别不同的字母,其中A喜欢a, c, e...,B喜欢b, d, f...。
现在有一个字符串,我们每次可以交换两个字母,不限制交换次数,要求这两个字母分别被两个不同的人喜欢。请问我们能否通过交换操作使得字符串S1转变成字符串S2。如果可以返回Yes,否则返回No。
- END -