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