基準時間限制:1 秒 空間限制:131072 kb 分值: 80 難度:5級演算法題
收藏關注給定乙個n,要求找出乙個最短的字串s,使得所有1到n的整數都是s的子串行。
比如n=10,那麼s=」1234056789」的時候,是滿足條件的。這個時候s的長度是10。
現在給出乙個n,要求輸出最短s的長度。
input
第1行:給出乙個整數n (1<=n<=1e10000)。output
輸出最短s的長度input示例
10output示例
10不難發現最優的方法就是 12345678901234567890123456789......如此往復,關鍵就是找準每一位最高貢獻到那個數字使得1--這個數字全能表示出來,找規律發現就是n個後面那個數字組成的數
再減去一就是這一位能表示到的最大的數。
n位數一定能表示所有n-1位數,所以ret=(n-2)*10+9;
再從最高位考慮,只剩下兩個數,到s[0]/s[0]+1 ,讓n與最後乙個迴圈節迴圈到到s[0]能表示的極限作比較,如果n更大就ret+=s[0]-'0'+1;否則ret+=s[0]-'0';
1 #include2using
namespace
std;
3char s[10015];4
intf()
9 ret=(n-2)*10+9+s[0]-'0'
;10for(int i=0;ii)
15if(s[i]-'
0'>r)19}
20return
ret;21}
22int main()
51Nod 1385 湊數字(思維)
給定乙個n,要求找出乙個最短的字串s,使得所有1到n的整數都是s的子串行。比如n 10,那麼s 1234056789 的時候,是滿足條件的。這個時候s的長度是10。現在給出乙個n,要求輸出最短s的長度。input 第1行 給出乙個整數n 1 n 1e10000 output 輸出最短s的長度 sam...
51nod 貪心入門
有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...
51Nod 排隊接水 貪心
n n 個人一起排隊接水,第 i role presentation i i個人需要b i b i 的時間來接水。1 n 1000 1 n 1000 0 b i 1000 0 b i 1000 同時只能有乙個人接水,正在接水的人和沒有接水的人都需要等待。完成接水的人會立刻消失,不會繼續等待。你可以決...