SLON 不同於正解的中綴遞迴法

2021-09-25 12:59:31 字數 2142 閱讀 2053

slon是乙個調皮的學生,為了讓他靜下心來,老師給他出了一道數學題:

給定表示式a,a中含有變數x和+,-,*,(,)這些符號,括號成對出現,乙個算術運算子均對應兩個運算元,不能出現(-5)或者(4+-5)等,乘號不能省略,並且表示式a中x只能是一階,即一階表示式:

合理表示式:a=5 + x∗(3 + 2) or x + 3∗x + 4∗(5 + 3∗(2 + x−2∗x)).

不合理表示式:a=5∗(3 + x∗(3 + x)) or x∗(x + x∗(1 + x)).

求a%m==p時,最小的x

輸入

第一行輸入乙個表示式a,(1 ≤|a|≤ 100000)。

第二行輸入兩個整數p (0 ≤ p ≤ m −1)和m (1 ≤ m ≤ 1000000)。

輸出

輸出最小的非負x (0 ≤ x ≤ 1000000)。

樣例輸入1

5+3+x

9 10

樣例輸出1

1樣例輸入2

20+3+x

0 5樣例輸出2

2樣例輸入3

3*(x+(x+4)*5)

1 7樣例輸出31

這道題本來是用字尾來做的,堅定操守的朋友請看老師的正解

我們先想:a是乙個一階表示式(一次函式)吧,

初中數學裡講了,乙個一次函式可以表達成 kx+b 的形式,比如樣例一可以表達成 x+8,樣例二可以表達成 x+23,樣例三可以表達成 18x+60 。

那麼只要求到了這個k和b,由於0 ≤ x ≤ 1000000,就能暴力列舉(也可以用擴歐,那樣快些)。

接下來就是本題的精髓:把賊複雜的表示式a縮成 kx+b 。

我們可以先用分塊的思想:因為加減法是最後計算的,所以把a分成若干部分相加的和,那麼是不是每乙個部分都能表示成 kx+b 的形式呢?(顯然)

用函式 ins() 來把乙個式子變為 kx+b,那麼由於把a分成多少份是不確定的,最好用乙個動態陣列vector儲存每個部分,當遇到乙個數或乙個x時,如果前面是「+」或「-」,就把它加進去(減法就加個負號);如果前面是「*」,就把陣列最後一位乘上它。

當遇到「(」時,就遞迴進去,把括號內的式子 ins() 成乙個 kx+b ,然後跟前面一樣的操作。

還有一點,因為題目沒說明a裡面的數有多大,所以可能爆longlong,要邊操作邊把數模m,不影響結果。

具體操作及細節請看下面的**

#include#include#include#include#include#include#define ll long long

using namespace std;

ll k,b,p,m;

int l;

string ss;

struct itnitn(ll k,ll b)

itn operator+(const itn&c)

itn operator*(const itn&c)

};char s;

itn ins()

} else if(s=='x')

if(l<=ss.length())s=ss[l++];

} else if(s=='+')

else if(s=='-')

else if(s=='*')

else if(s=='(')

if(l<=ss.length())s=ss[l++];

} }for(int i=0;i>ss;

scanf("%lld%lld",&p,&m);

s=ss[l++];

itn a=ins();

k=a.k,b=a.b;

//printf("a=%lldx+%lld\n",k,b);

for(ll x=0;x<=1000000;x++)

if(x*k+b>=0&&(x*k+b)%m==p)

puts("100000");

return 0;

}

數字營銷通常不同於傳統的營銷方式

隨著科技的日益發展,網際網路的發展和使用迫使企業要借助數字營銷。數字 是乙個富有成效的平台,可以讓企業自由地與觀眾建立聯絡,打造產品或服務的品牌,提高對產品的認知度,與觀眾建立有價值的關係,將您的企業定位為市場的領導者。magento開發 數字營銷被定義為通過各種形式的電子 廣告產品或服務。數字營銷...

DB2中不同於其它資料庫的操作

一 兩個字段聯接 select id,lastname firstname from t employee db2中用 來將兩個字段聯接起來 注意 不同於其它資料庫中用 來將兩個字段聯接起來 二 查出前幾條記錄 如sqlserver中的top select from t employee fetch...

深度學習中的優化不同於一般優化演算法

一 經驗風險最小化 1 機器學習中我們關注某些效能度量p,其定義在測試集上並且可能不可解。我們需要間接優化p。我們通過降低代價函式j j 來提高p。通常代價函式可寫為訓練集上的平均,如 j e x,y p data l f x y 1 j e x,y p d atal f x y 1 l是每個樣本的...