51Nod 1385 湊數字(思維)

2021-08-07 07:30:38 字數 841 閱讀 2652

給定乙個n,要求找出乙個最短的字串s,使得所有1到n的整數都是s的子串行。

比如n=10,那麼s=」1234056789」的時候,是滿足條件的。這個時候s的長度是10。

現在給出乙個n,要求輸出最短s的長度。

input

第1行:給出乙個整數n (1<=n<=1e10000)。

output

輸出最短s的長度

sample input

10

sample output

10

多寫幾個樣例,發現每次加數字都可以加在最後面,比如10這個數,現在是長度為10,而11的時候必須要加乙個1才能滿足條件,此時字串長度為11,而12的時候在11的基礎上不需要加數,因為11已經有這個子串了,這樣一直持續到21的時候都不需要加數字,而到了22的時候,和11一樣,必須要加乙個2才能滿足條件,而接下來23、24、一直到32都是在22的基礎上不要加數字的,到了33才需要加個3

於是可以得出規律,當所有位的數字相同時需要才加乙個數

所以我們只要遍歷輸入的字串的每一位的數就ok了,拿這個數與第一位進行比較(因為如果要加的話得保證每一位都不小於第一位)

而之前還有個工作就是打表,因為很容易就可以看出來,比如13是個兩位數,那麼它至少需要一組,比如113,那麼它就需要兩組,所以n位數至少需要n-1組,於是就先打個表為快

**#include#include#includeusing namespace std;

char n[10005];

int num[10005];

void f()

int main()

else if(n[i]

51nod 1385 貪心 構造

基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 收藏關注給定乙個n,要求找出乙個最短的字串s,使得所有1到n的整數都是s的子串行。比如n 10,那麼s 1234056789 的時候,是滿足條件的。這個時候s的長度是10。現在給出乙個n,要求輸出最短s的長度。inp...

51nod 1577 異或湊數

從左到右一共n個數,數字下標從1到n編號。一共m次詢問,每次詢問是否能從第l個到第r個數中 包括第l個和第r個數 選出一些數使得他們異或為k。資料量比較大。輸入請用掛 1 23 4 5 6 7 8 intread 輸出請用puts input 單組測試資料。第一行乙個整數n 0output m行,每...

51nod 1770 數數字 模擬 思維

統計一下 aa a aa a n個 a b 的結果裡面有多少個數字d,a,b,d均為一位數。樣例解釋 3333333333 3 9999999999,裡面有10個9。input 多組測試資料。第一行有乙個整數t,表示測試資料的數目。1 t 5000 接下來有t行,每一行表示一組測試資料,有4個整數a...