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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lightoj1060_组合数学

發(fā)布時(shí)間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lightoj1060_组合数学 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://lightoj.com/volume_showproblem.php?problem=1060

有一些用尼康托展開http://blog.csdn.net/niushuai666/article/details/6611131,簡單的尼康托,每個(gè)字母多個(gè)數(shù)的還不會(huì)

組合數(shù)學(xué)解看起來比較簡單

給定一個(gè)字符串和k,求字符串第k大字典序的排列...

康拓逆展開...可以求沒有重復(fù)元素的第k個(gè)排列,有重復(fù)的話,方法是一樣的,只是求解方案數(shù)變了。

由單純的階乘變?yōu)閘en!/cnt[i]!(0<=i<26),cnt[i]為第i個(gè)字母出現(xiàn)的次數(shù)。

而且某一位要放置的字母出現(xiàn)多次,那么只需要計(jì)算一次就好,因?yàn)樗械呐帕卸际且荒R粯拥摹?/p> 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cstdio> 6 #include <vector> 7 #include <ctime> 8 #include <queue> 9 #include <list> 10 #include <set> 11 #include <map> 12 using namespace std; 13 #define INF 0x3f3f3f3f 14 typedef long long LL; 15 16 char s[30]; 17 int a[30]; 18 LL fac[30]; 19 void init() 20 { 21 fac[0] = 1; 22 for(int i = 1; i < 21; i++) 23 fac[i] = fac[i-1] * i; 24 } 25 int main() 26 { 27 int t, n; 28 init(); 29 scanf("%d", &t); 30 for(int ca = 1; ca <= t; ca++) 31 { 32 scanf("%s %d", s, &n); 33 int len = strlen(s); 34 memset(a, 0, sizeof(a)); 35 for(int i = 0; i < len ; i++) 36 a[s[i]-'a']++; 37 LL res = fac[len]; 38 for(int i = 0; i < 26; i++)//相同字母沒有區(qū)別 39 if(a[i]) res /= fac[a[i]]; 40 if(res < n) 41 { 42 printf("Case %d: Impossible\n", ca); 43 continue; 44 } 45 printf("Case %d: ", ca); 46 for(int i = 0; i < len; i++) 47 { 48 for(int j = 0; j < 26; j++) 49 { 50 if(a[j] == 0) continue; 51 a[j]--; 52 LL te = fac[len-i-1]; 53 for(int k = 0; k < 26; k++) 54 { 55 if(a[k]) te /= fac[a[k]]; 56 } 57 if(te >= n)//大于等于要得到的字典序,get 58 { 59 printf("%c", j+'a'); 60 break; 61 } 62 a[j]++; 63 n -= te;//比要得到的字典序小,當(dāng)然減去 64 } 65 } 66 printf("\n"); 67 } 68 return 0; 69 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/luomi/p/5964505.html

總結(jié)

以上是生活随笔為你收集整理的lightoj1060_组合数学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。