Newcoder 70 D 幸運數字 (組合數學)

2021-08-29 14:03:38 字數 1493 閱讀 7269

description

定義乙個數字為幸運數字當且僅當它的所有數字都是4

44或者777。

比如說,47

、744、4

47、744、4

47、744

、4都是幸運數字而5、17

、467

5、17、467

5、17、4

67都不是。

現在想知道在1...

n1...n

1...

n的第k

kk小的排列中,有多少個幸運數字所在的位置的序號也是幸運數字。

input

第一行兩個整數n,k

n,kn,

k。( 1≤

n,k≤

109)

​(1\le n,k \le 10^9)​

(1≤n,k

≤109

)​output

乙個數字表示答案。

如果n

nn沒有k

kk個排列,輸出−1-1

−1。sample input

7 4sample output

solution

雖然此處n

nn很大,但是由於k

kk不大,故字典序第k

kk小的排列其前面的大部分數字都不變,最多後面十幾個數字順序改變,用康托展開即可得到後面亂序的十幾個數字,這些數字直接暴力判斷是否對答案有貢獻,前面的1

11~x

xx這些數字,i

ii就在第i

ii個位置上,所以它們對答案的貢獻就是幸運數字的個數,直接列舉九位是4

44還是7

77然後得到乙個幸運數字判斷其是否在該區間即可

code

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef pairp;

const int inf=0x3f3f3f3f,maxn=22;

int fact[maxn],g[maxn];

bool check(int x)

return 1;

}int solve(int n)

if(x>n)printf("-1\n");

else}}

int ans=solve(n-x);

for(int i=0;iif(check(n-x+1+i)&&check(n-x+1+a[i]))ans++;

printf("%d\n",ans);

} }return 0;

}

Newcoder 70 C 幸運數字 (水 )

description 定義乙個數字為幸運數字當且僅當它的所有數字都是4 44或者777。比如說,47 744 4 47 744 4 47 744 4都是幸運數字而5 17 467 5 17 467 5 17 4 67都不是。假設現在有乙個數字d dd,現在想在d dd上重複k kk次操作。假設d ...

python幸運數字判斷 幸運數字 小程式

問題描述 1 n個數字,每個數字的範圍 9999到9999,把這n個數字排序後,刪除奇數字的數,然後把剩餘的數按原位置排序後繼續刪除奇數字,直到剩餘乙個數為止,剩餘的數就是幸運數,輸出幸運數和它最初的位置。程式的輸入為兩個引數 數字的數量 n 具體的資料 以空格隔開 比如 6 66 666 6666...

幸運數字2

題目 定義乙個數字為幸運數字當且僅當它的所有數字都是4或者7。比如說,47 744 4都是幸運數字而5 17 467都不是。定義next x 為大於等於x的第乙個幸運數字。給定l,r,請求出next l next l 1 next r 1 next r include include include...