题意:
现在有n个人,按照顺时针方向座位,然后每个人最多可以有1~3个糖,问你满足ai + ai + n + ai + 2n ≠ 6 这样的情况有几种,并输出方案数。
思路:
一开始我一直在正着推,但是忘记了高中那个公式,然后看了一下题解,正难则反嘛。
因为每个人都有3种拿糖的情况,然后总共有3n个人,那么所有的情况数为3^(3n),但是又因为我们不想要和为6,所以要减去一些情况。
当(1,2,3)+它的排列数+(2,2,2)一共有7中是要被减掉的。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
#define maxn 100010
#define mod 1000000007
typedef __int64 ll;
ll ans=0,t1=1,t2=1;
ll powermod(ll a,ll b){
ll aa=1;
a=a%mod;
while(b){
if(b%2) aa=(aa*a)%mod;
b/=2;
a=(a*a)%mod;
}
return aa;
}
int main(){
int n;
scanf("%d",&n);
t1=powermod(27,n);
t2=powermod(7,n);
ans=t1-t2;
ans=ans%mod;
if(ans<0) ans=ans+mod;
printf("%I64d\n",ans);
}