CF 166E 题解
2023年7月19日
CF 166E 题解
题面
解题
记 为答案,走 步有 种方案。
如果走 步时不在原顶点,那么第 步有一种走法能走回原顶点。
转通项公式,得到 。
推导过程
使用数学归纳法。
首先,我们验证一下条件 和 :
设:对于任意 ,都有 。
证明:对于 也成立:
Q.E.D.
再加上一点求幂的优化即可。
代码
#include <cmath>
#include <cstdio>
using namespace std;
typedef unsigned long long ULL;
const int MOD = 1e9 + 7;
int main() {
int n;
scanf("%d", &n);
ULL f1; // 当前计算的 f
ULL f2 = 1; // 上一个 f,此处是边界
ULL fp = 1; // 用到的 3 的幂
for (int i = 1; i <= n; ++i) {
f1 = (fp - f2 + MOD) % MOD; // fp 取模过,大小关系不确定
f2 = f1;
fp = 3 * fp % MOD; // 不模会爆 unsigned long long,此处可证无副作用
}
printf("%llu", f1);
return 0;
}