【题目】
【题解】
由于左右相邻不能同色,确定了第一列之后,后面每一列的涂色方案也随之确定,因此答案就是 2^n ,还要对1e9+7取模。
但是n特别大,用到了费马小定理:
对于素数p,任取跟他互素的数a,有a^(p-1)(mod p)=1 ,所以任取b,有a^b%p=a^(b%(p-1))(%p)从而简化运算。
然后快速幂即可。
【代码】
#include <bits/stdc++.h>
const int mod=1e9+7;
typedef long long ll;
const int maxn=1e5+5;
char num1[maxn],num2[maxn];
ll quick_pow(ll a,ll b)
{
ll tmp=a%mod;
ll sum=1;
while(b)
{
if(b&1) sum=sum*tmp%mod;
tmp=tmp*tmp%mod;
b>>=1;
}
return sum;
}
int main()
{
scanf("%s%s",num1,num2);
int l=strlen(num1);
ll ans=0;
for(int i=0;i<l;++i)
{
ans=(ans*10+(num1[i]-'0'))%(mod-1);
}
printf("%lld\n",quick_pow(2,ans));
return 0;
}