設有n個正整數(n≤20),將它們聯接成一排,組成乙個最大的多位整數。
例如:n=3時,3個整數13,312,343聯接成的最大整數為:34331213
又如:n=4時,4個整數7,13,4,246聯接成的最大整數為:7424613
第一行,乙個正整數n。
第二行,n個正整數。
乙個正整數,表示最大的整數
3
13 312 343
34331213
(注:以下「a+b」形式表示a字串後接上b字串所得字串)
如果直接暴搜,複雜度高達o(
n!) o(n
!)
,即使加了剪枝也無濟於事。
那麼這道題多半是以一種特定的方式排序後輸出。
怎麼排序呢?
我們把數字看成字串,考慮構成乙個字串中的任意兩個子字串a和b,若a+b < b+a,那麼顯然我們把b放在a的前面更優。舉個例子,100+10 < 10+100,所以10100比10010更優(這個例子也可以排除直接比較a和b的大小的做法)。因此,我們就以此為排序依據,排序後一次輸出即可。
用c++的string是真的方便!
#include
#include
#include
#include
using
namespace
std;
int n;
string s[25];
bool cmp(string a, string b)
int main()
P1012 拼數 字串
設有nn個正整數 n 20 n 20 將它們聯接成一排,組成乙個最大的多位整數。例如 n 3n 3時,33個整數1313,312312,343343聯接成的最大整數為 3433121334331213 又如 n 4n 4時,44個整數77,1313,44,246246聯接成的最大整數為 742461...
noip1998 多位數連線 (排序,字串處理)
a1118.多位數連線 時間限制 1.0s 記憶體限制 256.0mb 總提交次數 823ac次數 214 平均分 60.51 將本題分享到 檢視未格式化的試題 提交試題討論 試題 noip1998 提高組 問題描述 設有n個正整數 n 20 將它們聯接成一排,組成乙個最大的多位整數。例如 n 3時...
洛谷P1012拼數 字串排序
設有n個正整數 n 20 將它們聯接成一排,組成乙個最大的多位整數。例如 n 3時,3個整數13,312,343聯接成的最大整數為 34331213 又如 n 4時,4個整數7,13,4,246聯接成的最大整數為 7424613 輸入格式 第一行,乙個正整數n。第二行,n個正整數。輸出格式 乙個正整...