题意:从左上角刷到右下角,路线可以走八个方向,原先是白的就会被刷成黑的,原先是黑的还是黑的,问最后有几种涂色方案。不同的方案要求黑色的位置不一样。
以下是看题解之前的,事实上!我们进了一个思维误区
这道题完全不需要递归!N=3时的状态数和N=2时候的一点关系也么得!
第一列和最后一列2种方案,中间的(N-2)列都3种方案,所以f(n)=4*3^(n-2)
思路:找规律。
队友的代码,悄悄吐槽她快速指数幂的变量命名2333
#include<iostream>
#include<algorithm>
#include<set>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
#include<stdio.h>
#include<map>
using namespace std;
#define ll long long
const long long maxn=1e9+7;
ll F(ll di,ll zhi)
{
ll ans=1;
ll res=di % maxn;
while(zhi!=0)
{
if(zhi&1)
{
ans=(ans%maxn)*(res%maxn)%maxn;
}
res=(res%maxn)*(res%maxn);
zhi=zhi>>1;
}
return ans;
}
int main()
{
ll n;
scanf("%lld",&n);
if(n==1)
{
cout<<1<<endl;
return 0;
}
else
{
ll tmp=F(3,n-2)%maxn;
ll ans=(tmp*4)%maxn;
cout<<ans<<endl;
}
}