Codeforces Round #324 (Div. 2) Kolya and Tanya 组合数学
原题链接:http://codeforces.com/contest/584/problem/B
题意:
有3*n个人围成一个圈,每个人可以分配1到3个硬币,但是相邻为n的三个人的和不能是6,问你有多少种方案
题解:
考虑反面,则答案是:
$$27^n-(3!+1)^n$$
代码:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; typedef long long LL; LL n; LL mod=1000000007; LL Pow(LL a,LL b) { LL res = 1; while (b) { if (b & 1)res = res * a % mod; b >>= 1; a=(a*a)%mod; } return res; } int main() { cin >> n; cout << (Pow(27, n) + mod - Pow(7, n)) % mod << endl; return 0; }