Description
TomCat有一个环(如图)有N个单元,并且有4中颜色。他希望把环的每一个单元格都染上颜色,但是相邻的两个单元格颜色不能相同。他想知道一共有几种染色方法

Input
输入单元格数N,N<=100000。
Output
输出染色总数对1000000007取余的结果。
Sample Input
1
2
Sample Output
4
12
解析
对分成了n块的环,涂m种颜色,相邻两个不能为同种色的问题,涂色方案数为 (m-1)^n+(-1)^n*(m-1) (m>=2&&n>=2)
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
//快速幂取模算法
ll quick_pow(ll a,ll b)
{
ll ret=1;
while(b>0)
{
if(b%2==1)
ret=ret*a%mod;
a=a*a%mod;
b=b/2;
}
return ret;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==1) printf("4\n");
else
{
ll ans=quick_pow(3,n)%mod;
if(n%2==1)
ans-=3;
else
ans+=3;
printf("%lld\n",ans);
}
}
return 0;
}
本文探讨了TomCat提出的环形单元格染色问题:如何使用4种颜色为环形排列的N个单元格上色,使得相邻单元格颜色不同。文章提供了计算染色方案数量的算法,并附带实现代码。
261

被折叠的 条评论
为什么被折叠?



