牛客 最小表示式

2021-10-02 20:00:19 字數 2246 閱讀 7690

題目連線

題解:

比賽的時候把題看錯了,以為只改變『+』的位置,補題時候,參考**,發現數字的順序也可以改變,有點難受,如果是這樣的話,那其實挺好想的,按加號分一下塊,把數字排乙個序,從小到大一遍一遍的往塊裡加,直到加完,然後用大數加法,把他們相加就好了

不知道為甚一直發生段錯誤的**:

#include

.h>

using namespace std;

#define ll long

long

const ll maxn=

5e6+5;

string s[maxn]

;ll p[maxn]

;string add

(string s1,string s2)

la=ma.

size()

; lb=mi.

size()

; l=la-1;

for(j=lb-

1; j>=

0; j--

,l--

) ma[l]

+= mi[j]

-'0'

;for

(j=la-

1; j>=

1; j--)if

(ma[j]

>

'9')

if(ma[0]

>

'9')

//處理第一位超過9了。

return ma;

}int

main()

// ll dis=len/cur+(len%cur!=0);

sort

(p,p+cnt)

; string st;

for(ll i=

1; i

) st[i]

=(p[i]

+'0');

ll j=

1,i=1;

while

(jelse

j++;}

string ans;

for(ll i=

1;i<=cur;i++

) ans=

add(ans,s[i]);

cout<

}

ac**:

#include

.h>

using namespace std;

#define ll long

long

const ll maxn=

5e6+5;

string s[maxn]

;ll p[20]

;string add

(string s1,string s2)

la=ma.

size()

; lb=mi.

size()

; l=la-1;

for(j=lb-

1; j>=

0; j--

,l--

) ma[l]

+= mi[j]

-'0'

;for

(j=la-

1; j>=

1; j--)if

(ma[j]

>

'9')

if(ma[0]

>

'9')

//處理第一位超過9了。

return ma;

}int

main()

int j=1;

for(

int i=

0; i<=

9; i++

)else

p[i]--;

}}string ans;

for(

int i=

1; i<=cur; i++

) ans=

add(ans,s[i]);

cout<

}

兩個**的不同就是乙個用sort,乙個用桶排,sort一直段錯誤,桶排就過了,也不知道為啥,可能是迴圈的時候的問題

牛客網最小表示式E

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

表示式求值(牛客)

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

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

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