题意:一个蚂蚁在正四面体的一个角,每秒都要移动一下去另外一个点,问n秒后又回到起点的方案数
设f[i]是 i 秒后走到abc的方案数,g[i]表示 i 秒后走到d的方案数,所以g[i] = f[i - 1] * 3, f[i] = 2 * f[i- 1] + g[i - 1]
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define rep(i, j, k) for (int i = j; i <= k; i++)
#define ll long long
#define mod 1000000007
using namespace std;
int n;
ll f[10000001], g[10000001];
int main ()
{
cin >> n;
if (n == 1)
{
cout << 0 << endl;
return 0;
}
f[2] = 2, g[2] = 3;
rep (i, 3, n)
{
g[i] = f[i - 1] * 3;
g[i] %= mod;
f[i] = (2 * f[i - 1] + g[i - 1]) % mod;
}
cout << g[n] % mod << endl;
}