gougou1012
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
1012
Symbolic Derivation
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1138
11 2006-07-26 16:07:31 00:00.00 852K C++ glimpse
一道复杂的模拟题。没有什么算法。
我的方法是递归处理一个字符串r(参数是母串的左右位置)。如果r被一个括号括住,继续递归脱了括号的r。如果r是一个数字,如果r是一个x,如果r是一个ln,则递归r( l +3 , r – 1 )。如果r是不是以上4种,则说明r是一个复杂的字符串。
首先得到字符串的分割运算符。如果在括号外有‘+’,‘-’运算符,返回最后一个加减运算符的位置,否则返回最后一个‘*’,’/’运算符的位置。之所以需要括号外是因为(x+x)*(y+y)的情况,‘*’是分割运算符,而不是‘+’。
题目没有很多的trick,有一点麻烦的是乘除微分的时候中间的‘+’‘-’号。
个人感觉是40题里难度前10的题目。
----
这题对f'(x)的形式给予了明确的说明,但是对f(x)是否要加括号却没有怎么说明。这里补充一下我的处理:只有在必须加括号,也就是*/一些带+-的表达式的时候,才加括号。如果原式是有括号的,那么总要输出括号。
比如
{{{
#!html
<pre>
x+1
1+0
(x+1)
(1+0)
((x+1))
((1+0))
</pre>
}}}
1012
Symbolic Derivation
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1138
11 2006-07-26 16:07:31 00:00.00 852K C++ glimpse
一道复杂的模拟题。没有什么算法。
我的方法是递归处理一个字符串r(参数是母串的左右位置)。如果r被一个括号括住,继续递归脱了括号的r。如果r是一个数字,如果r是一个x,如果r是一个ln,则递归r( l +3 , r – 1 )。如果r是不是以上4种,则说明r是一个复杂的字符串。
首先得到字符串的分割运算符。如果在括号外有‘+’,‘-’运算符,返回最后一个加减运算符的位置,否则返回最后一个‘*’,’/’运算符的位置。之所以需要括号外是因为(x+x)*(y+y)的情况,‘*’是分割运算符,而不是‘+’。
题目没有很多的trick,有一点麻烦的是乘除微分的时候中间的‘+’‘-’号。
个人感觉是40题里难度前10的题目。
这题对f'(x)的形式给予了明确的说明,但是对f(x)是否要加括号却没有怎么说明。这里补充一下我的处理:只有在必须加括号,也就是*/一些带+-的表达式的时候,才加括号。如果原式是有括号的,那么总要输出括号。
比如
x+11+0(x+1)(1+0)((x+1))((1+0))