日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第K个幸运排列 (51Nod-1635)

發布時間:2025/3/17 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第K个幸运排列 (51Nod-1635) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

比得喜歡幸運數字。這里所說的幸運數字是由4和7組成的正整數。比如,整數47,744,4是幸運數字,而5,17,467就不是。

一天比得夢到由數字1到n組成的第K個字典序排列。要求計算在這個排列中有多少個幸運數所在的位置的編號也是幸運數。

舉例如下:

比如排列[1,2,3,4],其中4為幸運數,它所在的位置的下標為4(幸運數),所在此排列中,結果為1.

又如,[1,2,4,3],4所在位置為3。3不是幸運數,所以,結果為0.

樣例解釋:
排列是由n個元素組成的一個序列,在這個序列中,整數1到n都要有且僅出現一次。

在排列中,第i個元素定義為 aiai (1≤i≤n)。

假定有排列a,和排列b。長度均為n。即都是由1到n組成。如果存在i(1≤i≤n)和對于任意j(1≤j<i)使得 ai < biai < bi 且 aj = bjaj = bj 。我們就說,a的字典序比b的字典序小。

對1到n組成的所有排列進行字典序升序排列。然后取其中的第K個排列,就是第K個字典序排列。

在樣例中,最終排列如下:

1 2 3 4 6 7 5

只有第4個位置是幸運數。

輸入

單組測試數據
共一行,包含兩個整數n和k(1≤n,k≤10^9)表示排列中的元素個數,和第K個字典序排列。

輸出

如果k超過出了1到n所有排列數的種數,那么輸出“-1”(沒有引號)。
否則,輸出題目要求結果。

輸入樣例

7 4

輸出樣例

1

思路:

題目本質是要求 n 個數的排列的第 k 小排列,而且要求排列中?a[i] 與 i 均為?4 或 7

1~n 的排列是 n!,而階乘的增長是極大的,可以發現,在 1E9 的范圍內,n 只要超過 13 就超過了最大范圍

因此,可以將 1~n 的序列分為兩部分,以滿足 pos!>=k 為分界,前半部分是 1~n-pos,后半部分是 n-pos+1~n

分成兩個部分后,可以確定是,前半部分一定是順序排列,此時用 dfs 來處理,只需要考慮有多少數字包含 4、7,后半部分對 k 做逆康托展開即可

源程序

#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long #define Pair pair<int,int> const int MOD = 1E9+7; const int N = 6000+5; const int dx[] = {0,0,-1,1,-1,-1,1,1}; const int dy[] = {-1,1,0,0,-1,1,-1,1}; using namespace std;LL fac[20]; LL num[20]; LL res; int vis[20];void init(LL n) {fac[0]=1;for(int i=1; i<=n; i++)fac[i]=fac[i-1]*i; } bool check(LL x) { //判斷是不是幸運數while(x) {LL cnt=x%10;if(cnt!=4 && cnt!=7)return false;x/=10;}return true; } void revContor(LL n,LL k,int base) { //逆康托展開k--;for(LL i=1; i<=n; i++) {LL cnt=k/fac[n-i];k=k%fac[n-i];for(LL j=1; j<=n; j++) {if(!vis[j]) {if(!cnt) {vis[j]=1;num[i]=j+base;break;}cnt--;}}}for(LL i=1; i<=n; i++) //判斷展開式中多少幸運數并且位置也是幸運數if(check(i+base) && check(num[i]))res++; } void DFS(LL x,LL n) { //DFS尋找到n有多少個幸運數if(x>n)return ;if(x)res++;DFS(x*10+4,n);DFS(x*10+7,n); } int main() {LL n,k;scanf("%lld%lld",&n,&k);init(n);if(n<13 && fac[n]<k ) { //沒有第k個排列printf("-1\n");return 0;}LL pos=1;int i=1;while(fac[i]<k){pos=i;i++;} // for(LL i=1; ; i++) { // if(fac[i]>=k) { // pos=i; // break; // } // }revContor(pos,k,n-pos);DFS(0,n-pos);printf("%lld\n",res);return 0; }

?

總結

以上是生活随笔為你收集整理的第K个幸运排列 (51Nod-1635)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天堂久久一区 | 久久桃色| a√在线观看 | 日韩久久高清 | 日本电影大尺度免费观看 | 国产在线观 | 国产视频福利在线观看 | 兔费看少妇性l交大片免费 日韩高清不卡 | 人人射人人射 | 香蕉网久久| 青青青国产精品一区二区 | 亚洲第一a | 浮生影视在线观看免费 | 国产精品伦理一区 | 琪琪射 | 中文字幕日日夜夜 | 国产一级理论 | 亚洲永久无码精品一区二区 | 亚洲精品~无码抽插 | 久久人人添人人爽添人人片 | 久久网站视频 | 3d毛片| 国产亚洲黄色片 | 人av在线| 午夜视频在线免费 | 久久最新 | 亚洲一区二区三区电影在线观看 | 色999日韩| 欧美日韩中文国产 | 中国大陆高清aⅴ毛片 | 蜜臀久久99静品久久久久久 | 手机在线看片你懂的 | 风流少妇| 欧美福利网址 | 一本之道av | 91精品国产日韩91久久久久久 | 97av在线| 96福利视频 | sese国产 | 久草福利资源 | 国产欧美一区二区在线观看 | 日本www在线 | 久久久精品人妻无码专区 | 国产欧美日韩二区 | 久久精品成人一区二区三区蜜臀 | 亚洲欧美自拍偷拍 | 亚洲h | 亚洲风情亚aⅴ在线发布 | 手机看片国产日韩 | av手机天堂网 | 成人免费一级 | 免费观看黄色小视频 | 免费在线观看成人av | 国产无码精品一区二区 | 四虎影院永久地址 | 天天躁夜夜操 | 做爰视频毛片视频 | 手机在线看片你懂的 | 强制高潮抽搐哭叫求饶h | 激情女主播 | 最新中文字幕一区 | 国内精品一区二区三区 | 白浆网站 | 国产精品久久久午夜夜伦鲁鲁 | 丰满大肥婆肥奶大屁股 | 99精品久久精品一区二区 | 亚洲国产精品综合久久久 | 污网站在线观看免费 | 手机在线观看毛片 | 日本一区二区三区视频在线观看 | 成人三级在线播放 | 久久影院一区二区 | 免费成人深夜夜国外 | 久久久久亚洲av无码专区喷水 | 调教一区二区三区 | 欧美极品在线视频 | 天天插天天摸 | 亚洲最大黄色网址 | 国产精品美女久久久久av爽 | 国模无码视频一区二区三区 | 中文字幕电影一区 | 久久黄色免费网站 | 精品国模| 日本不卡视频在线 | 亚洲v日本| 亚洲2022国产成人精品无码区 | 国产网站免费看 | 黄色av大全 | 日韩va中文| 欧美三根一起进三p | 久久网中文字幕 | 思思99精品视频在线观看 | 黑人极品ⅴideos精品欧美棵 | 污视频网站在线播放 | 9人人澡人人爽人人精品 | 欧美日韩亚洲一区二区 | 日韩女优在线播放 | 97综合| 日韩中文在线播放 |