給出乙個包含數字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做題思路 將輸入的中綴表示式,轉換為對應的字尾...