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.mzph.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. 核心引…