Description

在又一次消灭林登·万的战斗中,指挥官moreD缴获了一个神奇的盒子。盒子异常的坚固,以至于完全无法摧毁,唯一打开的方式是通过盒上的密码锁。

经过仔细的调查,研究人员一致认为这个盒子中隐藏了林登·万和他的弟弟林登·图的秘密。然而moreD使用了许多办法,都没能打开这个盒子。最后只好将这个盒子封存在了仓库的底层。

事情并没有结束。moreD之所以没能打开这个盒子,是因为老牌的调查员/邪教徒LCJ隐瞒了它的调查结果。LCJ经过不懈的努力,得出了结论。即:给你一个长度不超过17的由0~9组成的无前导0的字符串S,S中的数字排列组成的无前导零的能被17整除的整数中字典序第K小的那个数就是密码。

尽管解开了密码,然而处于对未知的恐惧,LCJ最终并没有打开盒子。然而另一个资历较浅的调查员/邪教徒,你,YDMan不知通过什么办法得知了上述信息,并得到了S和K。现在你决定要解开这个密码,来取得“终极的智慧”。

Input

一行,一个由0~9组成的字符串S和一个不超过17!的正整数K。

Output

一行,即密码。数据保证有解。

Sample Input

输入1:

17 1

输入2:

2242223 2

Sample Output

输出1:

17

输出2:

2242232

Data Constraint

对于40%的数据,字符串S长度<=12,K<=2*10^6。

对于100%的数据,字符串S长度<=17,K<=17!。

Hint

后记:

事实上,盒子中装的正是伦道夫·卡特当年穿越银匙之门的银色钥匙。YDMan在“掌(bei)握(xia)智(huai)慧(le)”智慧,终于成为了一个伟大的“诗(huan)人(zhe)”。而林登·万则和和他的弟弟继续使用林登·图钥匙与指挥官moreD进行不屈不挠的斗争。

思路

使用数位DP。
F[n][S][k],表示前n位使用的数字集合为S,对17取模的结果为k的情况下,后续的位置数字排列的合法方案数。
转移可以用记忆化搜索实现。求解的过程只要从高位开始从小到大枚举答案的每一位,判断是否有足够数目的解即可。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long f[1<<17][17],a[18],power[18],jc[18],c[18],k,n;
char s[20];
int main()
{scanf("%s %lld",s,&k);n=strlen(s);for(int i=1; i<=n; i++) a[i]=s[i-1]-'0';sort(a+1,a+n+1);int p=(1<<n)-1;f[p][0]=1;for(int i=p; i>0; i--){int q=1;for(int j=1; j<=n; j++) if((i&(1<<(j-1)))==0) q*=10,q%=17;for(int j=1; j<=n; j++)if(i&(1<<(j-1)))for(int w=0; w<=16; w++) f[i^(1<<(j-1))][(w+a[j]*q)%17]+=f[i][w];}jc[0]=1;for(int i=1; i<=17; i++) jc[i]=jc[i-1]*i;for(int i=p; i>0; i--){for(int j=0; j<=9; j++) c[j]=0;for(int j=1; j<=n; j++) if((i&(1<<(j-1)))==0) c[a[j]]++;for(int j=0; j<=9; j++)for(int w=0; w<=16; w++)f[i][w]=f[i][w]/jc[c[j]];}int q=0,r=0; bool b=0;power[0]=1;for(int i=1; i<=n; i++) power[i]=(power[i-1]*10)%17;for(int i=1; i<=n; i++){int o=-1;for(int j=1; j<=n; j++)if((q&(1<<(j-1)))==0){if(o==a[j]) continue;o=a[j];int w=(17-(r+a[j]*power[n-i])%17)%17;if(i==1&&a[j]==0) continue;if(f[q|1<<(j-1)][w]>=k){q|=1<<(j-1);(r+=a[j]*power[n-i])%17;printf("%d",a[j]);b=1; break;}else k-=f[q|1<<(j-1)][w];}}for(int i=1; i<=n; i++) if(((q&1<<(i-1)))==0) printf("%d",a[i]);return 0;
}

【JZOJ B组】【NOIP2013模拟9.29】密码相关推荐

  1. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  2. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  3. jzoj 3461. 【NOIP2013模拟联考5】小麦亩产一千八(math)

    3461. [NOIP2013模拟联考5]小麦亩产一千八 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hen ...

  4. JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿

    3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limi ...

  5. 【NOIP2013模拟9.29】密码

    Description 在又一次消灭林登·万的战斗中,指挥官moreD缴获了一个神奇的盒子.盒子异常的坚固,以至于完全无法摧毁,唯一打开的方式是通过盒上的密码锁. 经过仔细的调查,研究人员一致认为这个 ...

  6. jzoj. 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    Description Abathur采集了一系列Primal Zerg 的基因样本,这些基因构成了一个完整的进化链.为了方便,我们用A0,A1-An-1 这n 个正整数描述它们. 一个基因Ax 可以 ...

  7. [jzoj 3518] 【NOIP2013模拟11.6A组】进化序列(evolve){二进制}

    题目 Description Abathur采集了一系列Primal Zerg 的基因样本,这些基因构成了一个完整的进化链.为了方便,我们用A0,A1-An-1 这n 个正整数描述它们. 一个基因Ax ...

  8. 【NOIP2013模拟9.29】Mixing Chemicals

    Description 实验室有n瓶化学药品,编号为0到n-1,你知道第i瓶只有和第c[i]瓶放在一起才会发生爆炸.为了整理实验室,你需要将他们装进k个丌同的盒子里.显然,为了你的生命安全,你丌能把两 ...

  9. JZOJ 3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll)

    题目 Description 在美鱼和理树后援团拯救世界的同时,外表柔弱的理树也开始坚强起来,思考着离开这个世界的办法.误打误撞地,她遇上了正在教室破坏课桌打开迷宫入口的沙耶.沙耶告诉理树,这个世界的 ...

最新文章

  1. 微博平台StatusNet研究(3):友好URL与OpenID支持
  2. C++对象模型5——类对象的内存布局
  3. 树形数据深度排序处理示例(递归法).sql
  4. 动态变量和静态变量的区别,堆和栈的区别
  5. 天天象棋 残局闯关 第1关
  6. pytorch 获取模型参数_锂电池P2D模型参数获取:平衡电势
  7. date类型_Quartz与Date---cron的相互转换
  8. 中信银行MySQL面试_【深圳中信银行信用卡中心面试】面试题_面试经验_面试流程-看准网...
  9. Physically Based Specular for Artists
  10. ValidateRequest=false 不在.net2.0 中该怎么办?
  11. 如何写程序自动下载BBC Learning English的所有在线课程
  12. account for 与led to和result in的区别
  13. 短信后台功能与通道路由模块客户通道选择短信平台开发|国际短信通道短信后台源码
  14. elasticsearch学习笔记——二.querystring查询document方式与dsl查询document方式
  15. 手中的快递包别乱扔了!100万份个人信息被卖40亿
  16. opencv中的人脸检测案例
  17. 喜迎国庆 | 图扑数字孪生军演,构建跨域作战体系
  18. 计算机组成与系统结构指导,计算机组成与系统结构实验指导书
  19. 用MATLAB的GUI绘图的一个简单例子
  20. NIONetty的使用与分析

热门文章

  1. python 正则表达式生成_Python Create Re Project (python自动生成正则表达式项目)
  2. PE值、PB值、ROE和DCF值分别代表什么意思
  3. kali中怎么安装Nessus
  4. Win10 字符集修改为 UTF-8
  5. 第十四届数据中心峰会成功召开
  6. 盘锦市高2021年高考成绩查询,2021年盘锦高考状元名单公布,盘锦文理科状元是谁多少分...
  7. 正版Windows下载地址
  8. CAD快捷键命令:圆角命令的巧用
  9. 洛谷日常刷题(洛谷官方题单 思路+详解)
  10. nginx反向代理无效的解决办法