切換
舊版
前往
大廳
主題

ZeroJudge - e547: 01200 - A DP Problem 解題心得

Not In My Back Yard | 2019-11-29 17:24:27 | 巴幣 2 | 人氣 393

題目連結:


題目大意:
給定一正整數 t (1 ≦ t ≦ 10),代表有 t 筆測試資料,每筆佔一列輸入。每筆給定一個字串阿拉伯數字以及字母 x ,代表一個一元一次方程式(每一個係數項之值不會超過 1000)。

求一元一次方程式中變數 x 的解。如果無解,則輸出「IMPOSSIBLE」;如果有無窮多組解,輸出「IDENTITY」;否則,輸出小於等於唯一解之值的最大整數。



範例輸入:
2
2x-4+5x+300=98x
x+2=2+x


範例輸出:
3
IDENTITY


解題思維:
以等號「=」為界,分為左右。將 x 項放在一側,同時將常數項放在另一側。

接著判斷方程式的種類:
此方程式無解,若且唯若 x 的係數為 0 且常數項不為 0 ;
此方程式有無窮多組解,若且唯若 x 的係數以及常數項皆為 0 ;
除上之外,方程式有唯一解。且根據等量公理,解之值為常數項除以 x 之係數。

而在處理係數時,連續的數字之結尾如果碰到 x 為其後的字元,代表其為 x 項的係數之一。可以統一用一變數儲存係數的總和;連續數字如果碰到其他的字元作結,即「+」、「-」、「=」,代表此數字為常數項。同樣地,也可以使用一變數儲存常數項的總值。

又因為要將 x 的係數以及常數項分放在等號的不同側,因此在處理數字時要注意該數字在等號的哪一側。如果要移到另一側,則此值會乘上 -1 (等量公理)。最後同樣也要考慮數字前面可能原本就有的正負號。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作