牛客3005E 最小表示式 大數運算

2021-10-03 01:15:08 字數 1404 閱讀 1226

給出乙個包含數字1-9和加號的字串,請你將字串中的字元任意排列,但每種字元數目不變,使得結果是乙個合法的表示式,而且表示式的值最小。輸出那個最小表示式的值

合法的表示式的定義如下:

保證給出的表示式經過重排,存在乙個合法的解。

一行輸入乙個字串,僅包含數字1-9和加號+。

字串的長度小於5∗105。

一行輸出乙個數字,代表最小的解。

111+1
22
將加號的個數記為jia。

位數越多,數值越大,應該將數字個數盡量平分給jia+1個子式,讓小的數字再高位,大數字在低位。得到jia+1個子式後,用大數運算的思想加和求解。

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int n=

5e5+20;

int sum[n]

,num[12]

;//sum存最終數值,num[i]表示數字i出現的次數

string s[n]

;//存jia+1個子式

char str[n]

;//原字串

intmain()

int yu=

(len-jia)

%(jia+1)

;//長度為z+1的子式個數

int z=

(len-jia)

/(jia+1)

;//較短子式長度為z,較長的為z+1

int pos=1;

//賦值用的指標

for(

int u=

1;u<

10;u++)}

for(

int i=z-

1;i>=

0;i--

)//大數運算思想,將子式(大數)相加

for(

int i=

1;i<=yu;i++

)//長度為z+1的子式的最高位也要加起來

sum[z+1]

+=s[i][0

];int en=n-5;

for(

int i=

1;i)int k=en;

while

(!sum[k]

)k--

;//尋找ans的最高位

for(

int i=k;i>

0;i--

)printf

("%d"

,sum[i]);

cout

}

牛客網最小表示式E

牛客網題目位址 描述 給出乙個包含數字1 9和加號的字串,請你將字串中的字元任意排列,但每種字元數目不變,使得結果是乙個合法的表示式,而且表示式的值最小。輸出那個最小表示式的值 合法的表示式的定義如下 保證給出的表示式經過重排,存在乙個合法的解。輸入描述 一行輸入乙個字串,僅包含數字1 9和加號 字...

牛客 最小表示式

題目連線 題解 比賽的時候把題看錯了,以為只改變 的位置,補題時候,參考 發現數字的順序也可以改變,有點難受,如果是這樣的話,那其實挺好想的,按加號分一下塊,把數字排乙個序,從小到大一遍一遍的往塊裡加,直到加完,然後用大數加法,把他們相加就好了 不知道為甚一直發生段錯誤的 include h usi...

表示式求值(牛客)

題目描述 給定乙個字串描述的算術表示式,計算出結果值。輸入字串長度不超過100,合法的字元包括 0 9 字串內容的合法性及表示式語法的合法性由做題者檢查。本題目只涉及整型計算。輸入描述 輸入算術表示式 中綴表示式 400 5輸出描述 計算出結果值 405做題思路 將輸入的中綴表示式,轉換為對應的字尾...