c529. 微分
標籤 : 後序運算 微積分 數學
通過比率 : 1人/3人 ( 33% ) [非即時]
評分方式:
Special

最近更新 : 2019-09-06 20:47

內容

給你數學表示式,請求出式子的一次微分。

本題表示式包含:加減乘除次方、正負號、括號、自然常數 e(≈ 2.718281828459045)、自然對數(ln),以及三角函數(sin/cos/tan/cot/sec/csc)。

輸入說明
  • 每個檔案只有一筆測資,不需要重複讀取。
  • 每筆測資共兩行:第一行為欲求一次微分的表示式,第二行為一變數代表要對哪一個變數做微分。
  • 表示式中不同的變數數量可能有 0 至 3 個,且只可能為 x、y、z 三種。
  • 第二行的變數也只可能為 x、y、z 三種。
  • 變數有可能出現在任何地方,如分母(cos(x)/sin(y))、指數(2^sin(x))等。
  • 表示式的長度不會超過 1000 個字符,且不會有空白。
  • 表示式只可能包含以下字符或字符串:
    • 括號 ()
    • 數字 0-9(含 . 號,如 23.09)
    • 運算子 + - * / ^
    • 變數 x y z
    • 自然常數 e(≈ 2.718281828459045)
    • 自然對數 ln
    • 三角函數 sin cos tan cot sec csc
  • 變數、自然常數、自然對數以及三角函數名稱一律為小寫字母
  • 輸入式子中的常數數字不會有科學記號的表示法。
  • 運算子的優先序及結合序如下:
    優先序運算子說明結合序
    1^次方右至左
    2+ -正號、負號右至左
    3* /乘號、除號左至右
    4+ -加號、減號左至右
  • 括號內部優先執行。
  • 乘法符號(*)在以下情況中有可能省略:
    • [右括號(含函數的情況)、變數、自然常數] 接 [左括號、數字、變數、函數、自然常數]。

    • [數字] 接 [左括號、變數、函數、自然常數]。

    • 舉例:

      • (5+x)*(y-7z) 變成 (5+x)(y-7z)
      • sin(5+x)*23*8.3 變成 sin(5+x)23*8.3
      • e*x*y^6*cos(x)*ln(e^x) 變成 exy^6cos(x)ln(e^x)
      • 2.5*7*x^((2.5)*(7)) 變成 2.5*7x^((2.5)(7))
  • 特別注意次方運算的優先序:如 -4x^3 相當於 -4(x^3),並不是 (-4x)^3;-e^23 相當於 -(e^23),並不是(-e)^23。
  • 特別注意次方運算的結合序為右至左:如 3x^2^3 相當於 3x^(2^3) 也相當於 3(x^(2^3))、3y^3^2^5 相當於 3y^(3^(2^5)) 也相當於 3(y^(3^(2^5)))。
  • 特別注意因為次方優先於乘除法,如 x^3sin(50) 相當於 (x^3)sin(50) 而不是 x^(3sin(50))。
  • 三角函數及自然對數的次方符號寫在最後面,如 sec(x^5)^2 而不是寫成 sec^2(x^5);ln(z)^(x^2) 而不是寫成 ln^(x^2)(z)。
  • 三角函數及自然對數一定緊跟著一組括號,如 sinx 會寫成 sin(x)、lne 會寫成 ln(e)。
  • 為了避免混淆,指數中的正負號都會加上括號將順序區分清楚,如 x^-2.5 會寫成 x^(-2.5)、4z^+7.26 會寫成 4z^(+7.26) 或 4(z^(+7.26))。
輸出說明
  • 每筆輸出佔一行,為一次微分後的式子。
  • 本題為 Special Judge,檢測方法為:每一筆測資有 4 至 4 萬組不等的測試數據(如 [x=1,y=2,z=3]、[x=9.3,y=1.1,z=-0.3] 等),代入使用者輸出的一次微分式後,只要與正確解答相差小於 1.0 就算通過。所有數據都通過則該筆測資通過檢測。
  • 本題的 Special Judge 使用 C++ 編寫,運算過程全部使用 C++ 的 double。
  • 保證代入數據皆在正確式子的定義域中。
  • 保證數據代入正確式子的過程及結果皆不會出現正負無限的情況。
  • 本題三角函數的角度單位為徑度(弧度,radian)。
  • 輸出式子的格式規則大致與輸入式子的格式相同,不過請特別注意:
    • 輸出式子中的乘法符號(*)在特定情況下可以省略,是哪些情況請參閱輸入說明。

    • 變數、自然常數、自然對數以及三角函數名稱必須全為小寫字母

    • 輸出式子中可以有空白,如 ln( 5y ) 或 cot ( -5.3 * x^2 ) 皆為合法輸出。

    • 若輸出式子中有「以空白隔開的兩個常數數字」,則評分程式將會視為是一個數字,而不是乘法運算,如 23 78.1 會視為 2378.1。也可能導致輸出式子格式不正確,如 3.5 0.6 將視為 3.50.6,評分程式將視其為不正確的數字格式(有兩個小數點)。

    • 不支援 sqrt 函數,根號的輸出請寫成 0.5 次方(若要寫成1/2,請記得加括號,如 y^(1/2),因為次方運算優先於除法)即可。

    • 三角函數及自然對數的次方符號必須寫在函數括號的後面,如 sec(x^5)^2 或 (sec(x^5))^2 皆為等效的合法輸出,但 sec^2(x^5) 不是,該輸出會得到 WA。

    • 三角函數及自然對數的後面一定要有一組函數的括號,如 sin(x) 或 sin (x) 皆為合法輸出,但 sinx 及 sin x 都不是,兩者皆會得到 WA。

    • 輸出式子在運算過程中出現問題(如括號匹配不正確、二元運算子 (operator) 卻只有一個運算元 (operand) 等情況)皆會得到 WA。

  • 式子不需要化簡,只要正確即可:
    • 只要括號匹配格式正確且式子等效,你想加多少對括號都可以,如 4*x+3 可以輸出成 (4*x)+3,也可以輸出成 ((((4*((x))))+3))。

    • 只要式子等效,可以有像是 4x*0 或 23y*1*1*1 等多餘的輸出,如 4x^3 可以輸出成 (4*x^(4-1)*1)。

範例輸入 #1
(3x^34)/(-0.12x^172)
x

e^x
x

3x^5-108y^(-9)
x

3x^5-108y^(-9)
y

3x^5-108y^(-9)
z

((x^(3/4))*(x^2+1)^0.5)/((3x+2)^5)
x

4sin(cos(tan(cot(sec(y)))))
y

sin(x)^cos(x^2)
x

2z^sin(2^3^2)^4
z
範例輸出 #1
3450/(x^139)

e^x

15x^4

972/(y^10)

0

(6-51x+14x^2-39x^3)/(4x^(1/4)*(2+3x)^6*(1+x^2)^0.5)

4cos(cos(tan(cot(sec(y)))))(csc(sec(y)))^2sec(y)(sec(cot(sec(y))))^2sin(tan(cot(sec(y))))tan(y)

sin(x)^cos(x^2)*(cos(x^2)cot(x)-2x*ln(sin(x))sin(x^2))

2*sin(512)^4*z^(sin(512)^4-1)
測資資訊:
記憶體限制: 512 MB
提示 :
  • 如發現測資有問題,或對本題有任何疑慮者,請盡速告知我。
  • 前 10 組測資較為簡單,後 18 組較困難。
  • Zerojudge 限制程式碼的長度必須在 10KB 以內。
標籤:
後序運算 微積分 數學
出處:
Rekkursion [管理者: B0306125 (Rekkursion) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」