洛谷P1012 拼數

2022-04-07 10:37:54 字數 1350 閱讀 7327

設有n個正整數(n≤20),將它們聯接成一排,組成乙個最大的多位整數。

例如:n=3時,3個整數13,312,343聯接成的最大整數為:34331213

又如:n=4時,4個整數7,13,4,246聯接成的最大整數為:7424613

第一行,乙個正整數n。

第二行,n個正整數。

乙個正整數,表示最大的整數

輸入 #1複製

3

13 312 343

輸出 #1複製

34331213
題目標籤上寫著

「字串」和「排序」

妙啊,一眼把這題秒了

那我們怎麼來對字串進行排序呢?

(我還以為這題挺簡單來著

通過資訊科技查閱資料(看題解)我才知道

string型別中對字串也定義了兩個運算子

《的定義為按字典序比較,

+的定義為字串直接連線

那現在假設我們有了兩個字串a=131,b=232;

那我們考慮a+b和b+a之間的區別

因為此時string型別中的+表示的是鏈結

則a+b=131232

b+a=232131

很明顯有b+a>a+b

那我們考慮過載cmp然後用sort排字串

bool cmp(const

string &a,const

string &b)

這就有了乙個字串比較函式

那我們怎麼證明這個結論一定完全正確呢?

請讀者自證(大霧

那好吧我們來分類討論一下

首先是兩者不一樣長的情況

我們首先要判斷兩者的最高位

最高位大者在前

如果兩者長度相同

則還是先比較最大的位數

只要字典序大的則放在前面

於是過載乙個string型別的cmp並用sort

於是就很爽,就很爽

#include#include

using

namespace

std;

const

int maxn=25

;int

n;string

in[maxn];

bool cmp(const

string &a,const

string &b)

intmain()

//4073213221713513

洛谷 P1012 拼數

大約有兩種方法 來處理 用字串來比較兩數字 solution 1 p1012 拼數 include include include include include define maxn 21 using namespace std int n,i string s maxn bool cmp st...

洛谷P1012 拼數

有n個正整數 n 20 將它們聯接成一排,組成乙個最大的多位整數。例如 n 3時,3個整數13,312,343聯接成的最大整數為 34331213 又如 n 4時,44個整數7,13,4,246聯接成的最大整數為 7424613 輸入輸出格式 輸入格式 第一行,乙個正整數n。第二行,n個正整數。輸出...

洛谷P1012(拼數)

設有 n 個正整數 a1 an a 1 dots a n a1 an 將它們聯接成一排,相鄰數字首尾相接,組成乙個最大的整數 第一行有乙個整數,表示數字個數 n。第二行有 n 個整數,表示給出的 n 個整數 a ia i ai 乙個正整數,表示最大的整數 對於這一題,我剛開始還是想老老實實用int或...