乙個序列:
112123123412345123456…即第一部分包含1至1之間的所有數字,第二部分包含1至2之間的所有數字,第三部分包含1至3之間的所有數字,第i部分總是包含1至i之間的所有數字。求第k項數字是多少,注意第56項的數字為0.
由分析可知:
第一部分到第九部分相鄰部分的數字長度加一;
第十部分到第九十九部分相鄰部分的數字長度加二;
第一百部分到第九百九十九部分相鄰部分數字長度加三;
餘下的依次類推。
由此可知,如果把第一部分到第九部分看作是一段,每一段的數字長度組成乙個序列,即,則這個序列為乙個等差序列,我們可以求出來這一段數字的總長度,往後可以以此類推。等差序列求和公式為 s=a0+n*(n-1)*d/2,其中a0為等差序列的首項,n為序列元素個數,d為公差。
在這道題中,先利用二分找到ans,前ans部分總位數小於或等於k,求出前ans部分總位數,第ans+1部分第(k減去前ans部分總位數)位就為答案。
#include
using
namespace std;
int q;
long
long k;
long
long
getsum
(long
long a)
else
}return sum;
}int
solve
(long
long k)
else
r = mid -1;
}return ans;
}void
getnum
(long
long k)
else}if
(pos ==
0) cout << sum %
10<< endl;
else
cout << sum %
10<< endl;}}
intmain()
return0;
}
咕咕東的奇妙序列
題目 咕咕東的奇妙序列 題意 輸入 輸出 樣例 解題思路 這個題還是挺難的,主要是資料太大了,如果用字首和只能過前六個點,1e18不是鬧著玩的,陣列裝不下的 這裡說說我的思路 首先,我先搞個大小為8的陣列,存的是從1 10 i的數 如,陣列第乙個元素為 112123123412345 1234567...
M2 C 咕咕東的奇妙序列
題目 思路我覺得這道題非常難,一開始我完全找不到思路,只能盡量的騙分,後來問了別人才明白怎麼做。本題最核心的是兩個陣列,ret1和ret2。ret2 i 儲存的是從1到最大的i位數的子串的位數,做法是ret i 1 i位的所有數的位數,比如ret 2 即1 99的位數,就是1 9的位數 ret i ...
咕咕東的奇妙序列 二分 數字模擬
poj 1019 number sequence 題目給出一種序列表示方式,可以表示為 1 12 123 1234 12345678910 序列不帶空格 也就是說序列可被分組,第 i 組包含的是1到 i 的所有數字。題目給出多個詢問要求每次得到序列中第 k 位的數字。注意 k 要能取到 10 18....