问题描述:

多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成。
每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。
多多鸡的幸运数字是K,它打算把所有满足条件的单词里的字典序第K小的单词找出来,作为字典的封面。

输入描述:

共一行,三个整数N, M, K。(0 < N, M < 50, 0 < K < 1,000,000,000,000,000)

输出描述:

共一行,为字典序第K小的单词。

输入例子:

2 1 4

输出例子:

ab

例子说明:

满足条件的单词里,按照字典序从小到大排列的结果是
a
aa
aab
ab
aba
b
ba
baa

 思路分析:

dp[n][m]表示n个a,m个b的单词数量dp[n][m] = 1 + dp[n-1][m] + 1 + dp[n][m-1],根据K倒推,是前半部分,还是后半部分,来确定第一个字母是 a,还是b,注意dp[n][m] 可能超过long类型的范围,所以,用BigInteger来存dp。

代码实现:

import java.util.*;
import java.math.*;
public class Main{public static void main(String[] args){BigInteger[][] dp = new BigInteger[50][50];Scanner sc = new Scanner(System.in);int N = sc.nextInt();int M = sc.nextInt();long K = sc.nextLong();for(int i=0;i<=N;i++){dp[i][0] = new BigInteger(Integer.toString(i));}for(int i=0;i<=M;i++){dp[0][i] = new BigInteger(Integer.toString(i));}for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){//dp[i][j] = 1+dp[i-1][j] + 1+ dp[i][j-1];dp[i][j] = dp[i-1][j].add(dp[i][j-1]).add(new BigInteger("2"));}}StringBuilder sb = new StringBuilder();int n = N, m = M;long k = K;while(k>0){if(n>0 && m>0){if(dp[n-1][m].compareTo(new BigInteger(Long.toString(k-1)))>=0){//k<=dp[n-1][m]+1k--;sb.append('a');n--;}else{ //k>dp[n-1][m]+1k -= dp[n-1][m].longValue()+2;sb.append('b');m--;}}else if(n>0 && m==0){k--;sb.append('a');n--;}else if(n==0 && m>0){k--;sb.append('b');m--;}else{k=0;}}System.out.println(sb.toString());}
}

拼多多笔试题(三):多多的电子字典相关推荐

  1. 拼多多笔试题 回合制游戏

    拼多多笔试题 回合制游戏 题目描述 解法1(深度优先搜索) 解法2(数学规律) 昨晚心血来潮,拿了一份校招真题练练手,无奈这道题一直没有AC,只有75%的通过率,用了深度优先搜索+记忆化搜索最终还是会 ...

  2. 校招拼多多笔试题(前端工程师)

    考试时间:2017-09-02-提前批内推-笔试 1) 测试代码如下: var a = {}; b = { key: 'b' }; c = { key: 'c' }; a[b] = 123; a[c] ...

  3. 拼多多笔试题(一):多多的魔术盒子

    问题描述:  多多鸡有N个魔术盒子(编号1-N),其中编号为i的盒子里有i个球. 多多鸡让皮皮虾每次选择一个数字X(1 <= X <= N),多多鸡就会把球数量大于等于X个的盒子里的球减少 ...

  4. 2019提前批——拼多多笔试题

    一(85) 给定两个数组A和B.其中数组A是几乎严格升序排列的,几乎的定义是只需改变其 中一个数,即可满足完全升序排列. 你的任务是从数组A中找到这个数字,并从数组B中选取1数将其替换,使得数 组A是 ...

  5. python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务

    实现一个简易的秒杀服务,有3个接口: 1. 添加一个秒杀活动 addActivity(int startTime, int endTime, int goodsId, int limitQuantit ...

  6. [Nowcoder] 大整数相乘(拼多多笔试题)

    有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示.不能用系统自带的大整数类型. 输入描述: 空格分隔的两个字符串,代表输入的两个大整数 输出描述: 输入的乘积,用字符串表示 输入例 ...

  7. 拼多多笔试题 回合制角色扮演

    题目描述 你在玩一个回合制角色扮演的游戏.现在你在准备一个策略,以便在最短的回合内击败敌方角色.在战斗开始时,敌人拥有HP格血量.当血量小于等于0时,敌人死去.一个缺乏经验的玩家可能简单地尝试每个回合 ...

  8. 【拼多多笔试题】小熊战斗力

    解题思路 对小熊战斗力进行排序,糖果填充的饥饿值进行排序 遍历小熊,对其需要的饥饿值在谈糖果中进行二分查找,查找的终止条件为,找到小于等于当最接近小熊需要饥饿值得数字,然后小熊的需要饥饿值减去糖果可以 ...

  9. 拼多多笔试题(六):选靓号

    问题描述: A 国的手机号码由且仅由 N 位十进制数字(0-9)组成.一个手机号码中有至少 K 位数字相同则被定义为靓号.A 国的手机号可以有前导零,比如 000123456 是一个合法的手机号. 小 ...

最新文章

  1. 比特币核心概念及算法
  2. Android AIDL示例-回调方法版
  3. Spring学习进阶 (三) Spring AOP
  4. Activiti工作流之流程变量
  5. PHP程序员的技术成长规划(转)
  6. c++大作业迷宫游戏 规定时间内完成_孩子写作业慢的7种原因及其解决对策
  7. Qt的信号槽机制介绍
  8. tensor转换为图片_pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
  9. android实现应用程序只有在第一次启动时显示引导界面
  10. 私人影院音响效果如何有效提升?
  11. 用示波器对单片机I2C时序进行图形波形分析的试验小结
  12. 学习WPF绝佳的去处……WPF教程,WPF入门教程,WPF视频教程
  13. Unix编程艺术-翻译-开篇
  14. 基于139邮箱的新邮件到达免费短信提醒的研究与应用
  15. 浅谈数据治理(什么是数据治理)
  16. install quantopian时出现No module named pip.req的解决办法
  17. arcgis之地理配准
  18. Django 模型操作
  19. Linux学习:入门,概述,常用命令,环境安装
  20. 德国BEGO联手松柏牙科,加速拓展中国种植体和数字化牙科市场

热门文章

  1. 【BLE】蓝牙低功耗
  2. devtool使用介绍(1)
  3. python代码——计算披萨大小
  4. 镀金天空-CSS偏移
  5. H5新标签和H4的区别
  6. mysql注入啥意思_什么是mysql注入
  7. 深入了解分布式 Session,这篇就够了!
  8. PyCharm Database serverTimezone
  9. 网页指针css代码,css常用鼠标指针形状代码
  10. 百度搜索中台新一代内容架构:FaaS化和智能化实战