题目链接 [CQOI2018]九连环

题目背景

题目描述

圆环的装卸需要遵守两个规则:

  1. 第一个(最右边) 环任何时候都可以任意装上或卸下
  2. 如果第 个环没有被卸下,且第 个环右边的所有环都被卸下,则第 个环(第 个环左边相邻的环) 可以任意装上或卸下

与魔方的千变万化不同,解九连环的最优策略是唯一的。为简单起见,我们以“四连环”为例,演示这一过程。这里用 表示环在“剑”上, 表示环已经卸下。

初始状态为 1111 ,每步的操作如下:

  1. 1101 (根据规则2,卸下第 2 个环)
  2. 1100 (根据规则1,卸下第 1 个环)
  3. 0100 (根据规则2,卸下第 4 个环)
  4. 0101 (根据规则1,装上第 1 个环)
  5. 0111 (根据规则2,装上第 2 个环)
  6. 0110 (根据规则1,卸下第 1 个环)
  7. 0010 (根据规则2,卸下第 3 个环)
  8. 0011 (根据规则1,装上第 1 个环)
  9. 0001 (根据规则2,卸下第 2 个环)
  10. 0000 (根据规则1,卸下第 1 个环)

由此可见,卸下“四连环”至少需要 步。随着环数增加,需要的步数也会随之增多。例如卸下九连环,就至少需要 步。

请你计算,有 个环的情况下,按照规则, 全部卸下至少需要多少步。

输入输出格式

输入格式

输入文件第一行,为一个整数 ,表示测试点数目。

接下来 行,每行一个整数

输出格式

输出文件共m行,对应每个测试点的计算结果

输入输出样例

输入样例

3
3
5
9

输出样例

5
21
341

说明

对于 的数据,

对于 的数据,

对于 的数据,

题解

水题水题

用爆搜简单的打一个表(下面是二进制)

n 1 2 3 4 5 6 7
1 2 5 10 21 42 85
1 10 101 1010 10101 101010 1010101

将两个相邻的变量相加

n 1+2 2 + 3 3 + 4 4 + 5 5 + 6 6 + 7 7 + 8
11 111 1111 11111 111111 1111111 11111111

所以说

接下来我们用快速幂就可以了= =









等等..取模呢QAQ

不取模会崩掉吧

高精会T死(

我们还是老老实实打个FFT吧(,不会的同学可以看看我写的「数学」FFT / DFT / IDFT学习笔记(其实写的很烂)

代码:

比较板......略了











然后就完了吗?

没有

窝之前好像在「数学」FFT / DFT / IDFT学习笔记 的开头放了一段AC Code

每次,既然是高精,有是简单的式子为什么还要写FFT呢?Python大法好!

AC Code:

for i in range(int(input())) : print(pow(2, int(input()) + 1) // 3)