CF217B.Blackboard Fibonacci
提高+/省选-
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Fibonacci numbers are the sequence of integers: _f_0 = 0, _f_1 = 1, _f_2 = 1, _f_3 = 2, _f_4 = 3, _f_5 = 5, ..., f__n = f__n - 2 + f__n - 1. So every next number is the sum of the previous two.
Bajtek has developed a nice way to compute Fibonacci numbers on a blackboard. First, he writes a 0. Then, below it, he writes a 1. Then he performs the following two operations:
- operation "T": replace the top number with the sum of both numbers;
- operation "B": replace the bottom number with the sum of both numbers.
If he performs n operations, starting with "T" and then choosing operations alternately (so that the sequence of operations looks like "TBTBTBTB..."), the last number written will be equal to f__n + 1.
Unfortunately, Bajtek sometimes makes mistakes and repeats an operation two or more times in a row. For example, if Bajtek wanted to compute _f_7, then he would want to do n = 6 operations: "TBTBTB". If he instead performs the sequence of operations "TTTBBT", then he will have made 3 mistakes, and he will incorrectly compute that the seventh Fibonacci number is 10. The number of mistakes in the sequence of operations is the number of neighbouring equal operations («TT» or «BB»).
You are given the number n of operations that Bajtek has made in an attempt to compute f__n + 1 and the number r that is the result of his computations (that is last written number). Find the minimum possible number of mistakes that Bajtek must have made and any possible sequence of n operations resulting in r with that number of mistakes.
Assume that Bajtek always correctly starts with operation "T".
斐波那契数列是如下整数序列:f0=0,f1=1,f2=1,f3=2,f4=3,f5=5,…,fn=fn−2+fn−1。即每个后续项均为前两项之和。
巴杰克设计了一种在黑板上计算斐波那契数的巧妙方法:首先,他写下数字 0;然后,在其正下方写下数字 1。接着,他执行以下两种操作:
- 操作 “T”:将上方的数替换为上下两数之和;
- 操作 “B”:将下方的数替换为上下两数之和。
若他执行 n 次操作,且从 “T” 开始并交替选择操作(即操作序列为 “TBTBTBTB…”),则最后写下的数恰好等于 fn+1。
不幸的是,巴杰克有时会出错,连续重复执行同一操作两次或更多次。例如,若巴杰克想计算 f7,则他本应执行 n=6 次操作:“TBTBTB”。但如果他实际执行的操作序列为 “TTTBBT”,则他共犯了 3 次错误(即出现了 3 次相邻相同操作:“TT” 或 “BB”),并错误地算得第七个斐波那契数为 10。操作序列中的错误数定义为相邻且相同的操作对(即 “TT” 或 “BB”)的个数。
现给定巴杰克为计算 fn+1 而执行的操作次数 n,以及他最终得到的结果 r(即最后写下的数)。请找出巴杰克最少可能犯下的错误数,并给出一个长度为 n、产生结果 r 且错误数达到该最小值的任意操作序列。
假设巴杰克总是正确地以操作 “T” 开始。
输入格式
The first line contains the integers n and r (1 ≤ n, r ≤ 106).
第一行包含两个整数 n 和 r(1 ≤ n, r ≤ 106)。
输出格式
The first line of the output should contain one number — the minimum possible number of mistakes made by Bajtek. The second line should contain n characters, starting with "T", describing one possible sequence of operations with that number of mistakes. Each character must be either "T" or "B".
If the required sequence doesn't exist, output "IMPOSSIBLE" (without quotes).
输出的第一行应包含一个数字——Bajtek 可能犯下的最少错误数。
第二行应包含 n 个字符,且以 "T" 开头,描述一种能达到该错误数的操作序列。每个字符必须为 "T" 或 "B"。
如果所要求的序列不存在,则输出 "IMPOSSIBLE"(不带引号)。
输入输出样例
输入#1
6 10
输出#1
2 TBBTTB
输入#2
4 5
输出#2
0 TBTB
输入#3
2 1
输出#3
IMPOSSIBLE
输入解题思路,AI测评打分。不知道怎么写?