洛谷 P2022 有趣的數

2022-07-21 22:18:28 字數 1297 閱讀 3347

我們把乙個數稱為有趣的,當且僅當:

它的數字只包含0, 1, 2, 3,且這四個數字都出現過至少一次。

所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。

最高位數字不為0。

因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個:2031和2301。

請計算恰好有n位的有趣的數的個數。由於答案可能非常大,只需要輸出答案除以1000000007的餘數。

輸入格式:

輸入只有一行,包括恰好乙個正整數n (4 ≤ n ≤ 1000)。

輸出格式:

輸出只有一行,包括恰好n 位的整數中有趣的數的個數除以1000000007的餘數。

輸入樣例#1:

4

輸出樣例#1:

3
1

有趣的數2/*

3思路:

4字典序比k小的數分兩種

51.比k小的數

62.比k大的數

7根據觀察可以得出結論能算出比k小的字典序比k小的數的個數

8此時判斷是否存在合法的

9分兩種情況

101.1~k中比k字典序小的要超過要的m 不存在

112.若k為1 10 100 1000 100... 這樣的數 那麼前面只會有 數的位數-1個字典序小的數

12若m> 數的位數 不存在

13除了這兩種情況肯定能通過增加n補足m個字典序比k小的數

14*/

15 #include16 #include17 #include18

#define ll long long

19using

namespace

std;

20 ll n,m,i,j,k,sum,l,p=1;21

void

init()

2229 sum+=(l-1

);30

for(i=1;i<=l-1;i++)

31 p=p*10

;32 n=k,i=p;

33while

(n)34

39}

40int

main()

4149 n=k,i=k-i;/*

找比k大的字典序比k小的數的個數

*/50

while(sum1)51

56/*

sum此時代表比n小的字典序比k小的數的個數

*/57 cout<1-(sum-m+1),k)<58return0;

59 }

洛谷 P2022 有趣的數

讓我們來考慮1到n的正整數集合。讓我們把集合中的元素按照字典序排列,例如當n 11時,其順序應該為 1,10,11,2,3,4,5,6,7,8,9。定義k在n個數中的位置為q n,k 例如q 11,2 4。現在給出整數k和m,要求找到最小的n,使得q n,k m。輸入輸出格式 輸入檔案只有一行,是兩...

洛谷P2022 有趣的數

題目鏈結 首先求出1 k中有多少個在k前面的數的個數,若 m,則無解 比如12345,從第一位開始,1 0 1 共2個 1 0 1 12 10 12共3個 12 10 1 123 100 123 共24個 123 100 1 1234 1000 1234 共235個 1234 1000 1 之後看還...

洛谷 P2022 有趣的數 思維

傳送門 將1 n 1 n1 n的所有正整數都按照字典序排序,指定k m k mk m問nn n至少是多少時k kk的位置是第mmm位 這麼大的資料範圍我們顯然不能乙個個列舉,我直接推規律好了 有個十分明顯的規律,1 10 100 1 10 100 1 10 1 00這些數肯定在前面的 當n nn小於...