题目大意:3n个人围着一张桌子,给每个人发钱,可以使1块、2块、3块,第i个人的金额为Ai。若存在第个人使得Ai + Ai+n + Ai+2n != 6,则该分配方案满足条件,求所有的满足条件的方案数 结果 MOD 1000000007。
解题思路:当 n = 1 时有总共有27中情况,其中20中满足条件,则 (27^n - 7^n)为所求结果。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define ll long long
#define mod 1000000007
ll pow(int a,int b){
ll ans=1,base;
base = a;
while(b){
if(b&1){
ans *= base;
ans %= mod;
}
base *= base;
base %= mod;
b >>= 1;
}
return ans;
}
int main(){
int n,t;
ll ans1,ans2;
while(scanf("%d",&n) == 1){
if(n == 1){
printf("20\n");
continue;
}
ans1 = pow(27,n);
ans2 = pow(7,n);
printf("%I64d\n",(ans1-ans2+mod)%mod);
}
return 0;
}