题解?
查看原帖
题解?
655351
evening_maple楼主2022/7/6 14:50

实在不知道为什么自己不能写题解 (因为这种思路比较新颖,所以皮一下)

主要思路是运用python中的str.find(),str.replace()和eval(),代码思是二分搜索,答案的分为是-1e5~1e5(猜的)

# x:读入字符串并将a=b转为a-(b)的形式
x = ' ' + input().replace('=', '-(') + ')'

# 找到代码中的唯一自变量
bian = ''
i = 0
for i in range(len(x)):
    if 'a' <= x[i] <= 'z':
        break

while i < len(x) and 'a' <= x[i] <= 'z':
    bian += x[i]
    i += 1

# 将唯一自变量换为x
x = x.replace(bian, 'x')

# 若变量前为常数,应该多加'*'
num = 1
while num < len(x):
    num = x.find('x', num)
    if '0' <= x[num - 1] <= '9' and x[num] == 'x':
        x = x[:num] + '*' + x[num:]
        num += 2
    elif num == -1:
        break
    else:
        num += 1

# 在[zuo,you]区间二分搜索答案
zuo, you = -1e5, 1e5
ans = 0

# 因为是单调变化的,所以判断下是增加还是减少
if eval(x.replace('x', str(zuo))) > 0:
    i = -1
else:
    i = 1

while zuo + 0.00001 < you:
    ans = (zuo + you) / 2
    da = eval(x.replace('x', str(ans))) * i
    if da == 0:
        break
    elif da > 0:
        you = ans - 0.0001
    else:
        zuo = ans + 0.0001

print(f'{bian}={ans:.3f}')

python 时间大概25ms一个样例左右

2022/7/6 14:50
加载中...