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