lightoj1060_組合數學

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

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

組合數學解看起來比較簡單

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

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

由單純的階乘變為len!/cnt[i]!(0<=i<26),cnt[i]為第i個字母出現的次數。

而且某一位要放置的字母出現多次,那么只需要計算一次就好,因為所有的排列都是一模一樣的。

 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++)//相同字母沒有區別
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;//比要得到的字典序小,當然減去               
64             }
65         }   
66         printf("\n");     
67     }
68     return 0;
69 }

?

轉載于:https://www.cnblogs.com/luomi/p/5964505.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

幾個so經常使用Function

SD_WF_ORDER_REJECT SO拒絕 RV_ORDER_FLOW_INFORMATION 獲得憑證流&#xff0c;支持OBD&#xff0c;SO等 call function RV_ORDER_FLOW_INFORMATION exporting aufbereitung 2 belegtyp C comwa l_comwa…

LIVE555建立RTSP服務記錄

在官網上面 http://www.live555.com/liveMedia/#config-unix下載最新源碼&#xff0c;并進行編譯&#xff0c;同時官網上面告訴了你怎么樣編譯已經不同平臺對應需要修改的內容 一、arm_linux_g下面編譯視頻文件LIVE555 【config.armlinux】 CROSS_COMPILE arm-none…

halcon自動對焦算法

1、介紹 圖像清晰度是衡量圖像質量的一個重要指標&#xff0c;對于相機來說&#xff0c;其一般工作在無參考圖像的模式下&#xff0c;所以在拍照時需要進行對焦的控制。對焦不準確&#xff0c;圖像就會變得比較模糊不清晰。相機對焦時通過一些清晰度評判指標&#xff0c;控制鏡…

HTML學習筆記06-連接

HTML超鏈接 HTML使用標簽<a>來設置文本超鏈接。 超鏈接可以是文字&#xff0c;也可以是圖片&#xff0c;點擊這些內容跳轉到新的文檔或當前文檔的某個部分 代碼類似這樣&#xff1a; <a href"url">連接文本</a> 實例&#xff1a; <!DOCTYPE HTM…

在Xcode中使用Git進行源碼版本控制

在Xcode中使用Git進行源碼版本控制 在應用程序開發過程中&#xff0c;很重要的一部分工作就是如何進行源碼的版本控制。當代碼出現問題時&#xff0c;我們就需要將代碼恢復到原先正常的版本。如果是多個人共同開發一個項目&#xff0c;那么代碼的控制就會非常復雜。幸運的是&am…

Linux環境變量的設置和查看方法

1. 顯示環境變量HOME $ echo $HOME /home/redbooks 2. 設置一個新的環境變量hello $ export HELLO"Hello!" $ echo $HELLO Hello! 3. 使用env命令顯示所有的環境變量 $ env HOSTNAMEredbooks.safe.org PVM_RSH/usr/bin/rsh Shell/bin/bash TERMxterm HISTSIZE1000 ..…

CefSharp試用

Github地址&#xff1a; https://github.com/cefsharp/CefSharp 首先下載所有源代碼下來 然后直接打開Sln 然后就可以直接調試WinForm、Wpf的Example了 注意地方&#xff1a; CefSharp.Core、CefSharp.BrowserSubprocess.Core 這兩個類庫是用C寫的&#xff0c;所以VisualStudio…

ORA-30649: 缺少DIRECTORY關鍵字的問題解決方法

在oracle 里執行該語句時 提示 ORA-30649: 缺少 DIRECTORY 關鍵字把NOT null 放到 default 后面&#xff0c;就是如下寫法&#xff0c;oracle 正常執行alter table PM_INFO ADD sort NUMBER(10,0) DEFAULT (0) NOT NULL;轉載于:https://www.cnblogs.com/person008/p/9234637.ht…

java 解決漢諾塔問題

//漢諾塔問題//HanYang 2016/10/15 import java.util.Scanner; //輸出public class Hanuota { public static void Show(String a,String b){ System.out.print(" " a "->" b " " ); } //從a移到c public static void Fun(int n, Str…

利用VC++實現局域網實時傳輸

本文針對不同的局域網&#xff0c;提出一種通用的實時視頻傳輸的解決方案。在使用Divx編解碼的基礎上&#xff0c;提出了從壓縮、組幀、發送到接收、解壓整個流程的思想&#xff0c;具體實施方案和VC實現核心源代碼以及傳輸控制策略&#xff0c;有效地保證了高質量的實時視頻傳…

ASP.NET Web API之消息[攔截]處理(轉)

出處&#xff1a;http://www.cnblogs.com/Leo_wl/p/3238719.html 標題相當難取&#xff0c;內容也許和您想的不一樣&#xff0c;而且網上已經有很多這方面的資料了&#xff0c;我不過是在實踐過程中作下記錄。廢話少說&#xff0c;直接開始。 Exception 當服務端拋出未處理異常…

無人駕駛遇見人工智能 百度將推有“大腦”的汽車

在日前舉行的中國云計算大會&#xff0c;百度高級副總裁、技術戰略委員會主席王勁表示&#xff0c;百度將在今年下半年推出無人駕駛汽車。不過&#xff0c;百度自己并不會造車&#xff0c;它將與第三方汽車廠商合作制造。據介紹&#xff0c;百度將利用現有的大數據、地圖、人工…

AdlinkMotionCardLibrary函數C++

#include "stdafx.h" #include "AdlinkMotionCardLibrary.h"extern "C" _declspec(dllexport) bool _stdcall MotionCardIni(I32& BoardId_InBits, I32 Mode) { try{//mode0&#xff1a;&#xff1a; 系統指定卡號 mode1&#xff1a;&am…

查看表的結構

describe 表名轉載于:https://www.cnblogs.com/dengyg200891/p/5966565.html

定制一個網絡文件系統

定制一個網絡文件系統【把pc上的文件系統掛接到開發板上面】 1、修改exports文件【PC上】一定要修改&#xff0c;否則不會成功 vi /etc/exports 修改為 /空格* 并保存 2、設置開發板上的IP地址 ifconfig eth0 192.168.0.11 up 3、設置PC上的IP地址 ifconfig et…

創建Hbase Hive外部表報錯: Unable to determine ZooKeeper ensemble

創建HBase的Hive外部表1: create external table ttt(rowkey string,info map<string,string>)STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler WITH SERDEPROPERTIES ("hbase.columns.mapping" ":key,info:") TBLPROPERTIES ("h…

死磕算法之快速排序

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。博客源地址為zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80851021 學習更多算法系列請參考文章&#xff1a;死磕算法之匯總篇 快速排序是一個運用了分治法和遞歸算法的排序方…

九點標定進行仿射變換halcon仿真代碼

篩選出來的點得坐標已經顯示在PxRow、PxColunm里邊 * Image Acquisition 01: Code generated by Image Acquisition 01 read_image (Image, C:/Users/Administrator/Desktop/標定板圖片.png) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHand…

用SQL語句添加刪除修改字段_常用SQL

1.增加字段 alter table docdsp add dspcodechar(200)2.刪除字段 ALTER TABLE table_NAME DROP COLUMNcolumn_NAME3.修改字段類型 ALTER TABLE table_name ALTER COLUMNcolumn_name new_data_type4.sp_rename 改名 EXEC sp_rename [dbo].[Table_1].[fi…

DAVINCI開發原理之三----達芬奇編解碼引擎Codec Engine(CE)

DaVinci是DSP和ARM 雙核架構的SOC芯片。對芯片與外界的交互通過ARM端的Montavista Linux和相關驅動與應用程序來管理&#xff0c; DSP端只處理編解碼相關的算法。DSP和ARM之間的通訊和交互是通過引擎(Engine)和服務器(Server)來完成的。1. 編解碼引擎(Codec Engine) a. 核心引…