#P1467. Symbolic Derivation
Symbolic Derivation
题目描述
编写一个程序,对给定的函数 进行符号求导,即计算 。函数 由表达式定义,可能包含以下运算:
- 加法()
- 减法()
- 乘法()
- 除法()
- 自然对数()
操作数可以是变量 或数值常数。表达式可以包含任意嵌套的子表达式(用括号 表示),并以常见的中缀形式给出,例如:
$$\frac{(2*\ln(x+1.7)-x*x)}{(-7)+3.2*x*x} + (x+3*x)*x $$输入规则
- 数值常数的格式为 (可选符号,整数和小数部分位数不限),如 。
- 输入表达式保证语法正确(无错误)。
- 每行一个 的表达式,无空格。
输出规则
- 输出导数表达式,保持中缀形式,不进行任何化简(如 、、 等需保留)。
- 严格按以下求导规则添加括号:
- (输出时用 而非 )
- 常数导数为
运算符优先级与结合性
- 乘除(、)优先级高于加减(、),括号可改变优先级。
- 所有运算符均为左结合:
输入输出示例
输入样例 1
x*x/x
-45.78*x+x
-2.45*x*x+ln(x-3)
输出样例 1
((1*x+x*1)*x-x*x*1)/x^2
(0*x-45.78*1)+1
((0*x-2.45*1)*x-2.45*x*1)+(1-0)/(x-3)
样例解释
- 对 求导,按除法规则展开并保留冗余项。
- 对 求导,分别处理常数乘法和加法。
- 对 求导,依次应用乘法、对数和减法规则。
题目来源
Southeastern Europe 2000
注:本题需实现符号求导的解析与展开,重点在于严格按规则添加括号且不化简表达式。