CF 584B Kolya and Tanya

题目大意: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;
}
posted @ 2015-10-07 14:50  阿文的博客  阅读(204)  评论(0编辑  收藏  举报