题目:
摩尔斯电码字典
在没有电话的时代,摩尔斯电码是无线电传输领域中的一种常用代码。电码以短信号(短点,o)和长信号(长点,-)的不同组合表示各种文字。例如:o—表示英文字母J,而—表示英文字母M。
假设有一本以n个长点和m(n、m<=100)个短点组成的、包含所有信号的字典。例如:n=m=2,就会包含如下信号。
–oo
-o-o
-oo-
o–o
o-o-
oo–
这些信号已按照字典顺序排列好了。-的ASKII码是45,而o的ASCII码是111。因此,按照字典顺序,-在前,o在后。给定n和m时,编写代码计算出此字典的第k(k<=1,000,000,000,000)个信号。例如:上述字典的第四个信号是o–o。
代码
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1e3 + 5;
double pre[maxn][maxn];
//预处理,计算出所有的组合总数
void pre_solve(int n, int m) {
//字典序:长点在前,短点在后
for (int i = 1; i <= n; i++)
pre[i][0] =