题目大意:3*n个人围成一个圈,每人手上可以拿1到3个硬币。相邻为n的三个人的硬币和不能为6,问共有多少种方案
分析:考虑反面,一共有7种方案为6,又每个三元组互相独立,所以共有7^n种方案。总方案数为3^(3*n)。因此,最后的答案就是27^n-7^n
代码:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <set>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
#define mod 1000000007
int n;
int main() {
while(~scanf("%d", &n)) {
long long ans = 1, mi = 1;
for(int i = 0; i < n; i++)
ans = ans*27 % mod;
for(int i = 0; i < n; i++)
mi = mi*7 % mod;
printf("%I64d\n", (ans+mod-mi)%mod); //ans加上mod,是因为之前取模完,可能会小于mi
}
return 0;
}