1219. DNA

1219. DNA

题目描述

分析如 \(DNA\) 序列这样的生命科学数据是计算机的一个有趣应用。从生物学的角度上说, \(DNA\) 是一种由腺嘌呤、胞嘧啶、鸟嘌呤和胸腺嘧啶这四种核苷酸组成的链式结构。这四种核苷酸分别用大写字母 \(A\)、\(C\)、\(G\)、\(T\) 表示。这样,一条 \(DNA\) 单链可以被表示为一个只含以上四种字符的字符串。我们将这样的字符串称作一个 \(DNA\) 序列。

有时生物学家可能无法确定一条 \(DNA\) 单链中的某些核苷酸。在这种情况下,字符 \(N\) 将被用来表示一个不确定的核苷酸。换句话说,\(N\) 可以用来表示 \(A\)、\(C\)、\(G\)、\(T\) 中的任何一个字符。我们称包含一个或者多个 \(N\) 的 \(DNA\) 序列为未完成序列;反之,就称作完成序列。如果一个完成序列可以通过将一个未完成序列中的每个 \(N\) 任意替换成A、C、G、T得到的话,就称完成序列适合这个未完成序列。举例来说,\(ACCCT\) 适合 \(ACNNT\),但是\(AGGAT\) 不适合。

研究者们经常按照如下方式排序四种核苷酸:

  • \(A\) 优先于 \(C\),
  • \(C\) 优先于 \(G\),
  • \(G\) 优先于 \(T\)。

如果一个 \(DNA\) 序列中的每个核苷酸都与其右边的相同或者优先,就将其归类为 范式-1 (form-1)。举例来说,\(AACCGT\) 是 范式-1,但是 \(AACGTC\) 不是。

一般来说,一个 \(DNA\) 序列属于 范式-j (\(j>1\)),只要它属于 范式-(j-1) 或者是一个 范式-(j-1) 和一个 范式-1 的连接。举例来说,\(AACCC\)、\(ACACC\) 和 \(ACACA\) 都是 范式-3,但 \(GCACAC\) 和 \(ACACACA\) 不是。

同样,研究者们按照字典序对 \(DNA\) 序列进行排序。按照这个定义,最小的属于 范式-3 的 \(DNA\) 序列是 \(AAAAA\),最大的是 \(TTTTT\)。这里是另外一个例子,考虑未完成序列 \(ACANNCNNG\)。那么前 \(7\) 个适合这个未完成序列的 \(DNA\) 序列是:

ACAAACAAG
ACAAACACG
ACAAACAGG
ACAAACCAG
ACAAACCCG
ACAAACCGG
ACAAACCTG

写一个程序,找到按字典序的第 \(R\) 个适合给定的长度为 \(M\) 的未完成序列的 范式-K

输入

第一行,包含三个由空格隔开的整数:\(M\)(\(1 \leq M \leq 5 \times 10^4\)),\(K\)(\(1 \leq K \leq 10\)),\(R\)(\(1 \leq R \leq 2 \times 10^{12}\))。

第二行,包含一个长度为 \(M\) 的字符串,表示未完成序列。保证适合该未完成序列的 范式-K 的总数不超过 \(4 \times 10^{18}\),因此该数可以用 C 和 C++ 中的 long long 类型或者 Pascal 中的 Int64 类型表示。
同时,\(R\) 不会超过适合给定未完成序列的 范式-K 的总数。

输出

在第一行中输出第 \(R\) 个适合输入中的未完成序列的 范式-K

样例 1

输入

9 3 5
ACANNCNNG

输出

ACAAACCCG

样例 2

输入

5 4 10
ACANN

输出

ACAGC

数据范围限制

对于每组输入数据,如果你的程序输出正确便得到 \(100\%\) 的分数,否则得0分。
在20分(20%)的测试数据中,\(M\) 的值最多为 10。

提示

在 C 和 C++中,你应该使用 long long 数据类型。
下面的程序片断给出了如何从标准输入中读写 long long

long long a;
scanf("%lld",&a);
printf("%lld\n",a);

在 Pascal 中,你应该使用 Int64 类型。

来源

APIO2008

信息

ID
1218
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者