C 咕咕東的奇妙序列

2021-10-04 23:08:14 字數 1021 閱讀 6892

乙個序列:

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....