NOIp1998 T2 拼數(字串,排序)

2021-08-15 02:52:35 字數 835 閱讀 7136

設有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個正整數。輸出格式 乙個正整...