题目链接 [CQOI2018]九连环
题目背景
略
题目描述
圆环的装卸需要遵守两个规则:
- 第一个(最右边) 环任何时候都可以任意装上或卸下
- 如果第
个环没有被卸下,且第
个环右边的所有环都被卸下,则第
个环(第
个环左边相邻的环) 可以任意装上或卸下
与魔方的千变万化不同,解九连环的最优策略是唯一的。为简单起见,我们以“四连环”为例,演示这一过程。这里用 表示环在“剑”上,
表示环已经卸下。
初始状态为 1111 ,每步的操作如下:
1101(根据规则2,卸下第2个环)1100(根据规则1,卸下第1个环)0100(根据规则2,卸下第4个环)0101(根据规则1,装上第1个环)0111(根据规则2,装上第2个环)0110(根据规则1,卸下第1个环)0010(根据规则2,卸下第3个环)0011(根据规则1,装上第1个环)0001(根据规则2,卸下第2个环)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)

京公网安备 11010502036488号