poj3734
2015-10-17 14:10
351 查看
链接:点击打开链接
题意:N个方块排成一列,用红蓝绿黄四个颜色的油漆给这些方块染色,求染成红色方块和绿色方块的个数同时为偶数的染色方案的个数,输出对10007取余后的结果
代码1:
题意:N个方块排成一列,用红蓝绿黄四个颜色的油漆给这些方块染色,求染成红色方块和绿色方块的个数同时为偶数的染色方案的个数,输出对10007取余后的结果
代码1:
#include <iostream> #include <stdio.h> #include <math.h> #define Mod 10007 using namespace std; long long f[100]; const int MAX=3; typedef struct{ long long m[MAX][MAX]; }Matrix; Matrix P={2,1,0, 2,2,2, 0,1,2}; Matrix I={1,0,0, 0,1,0, 0,0,1}; Matrix matrixmul(Matrix a,Matrix b){ int i,j,k; Matrix c; for(i=0;i<MAX;i++) for(j=0;j<MAX;j++){ c.m[i][j]=0; for(k=0;k<MAX;k++) c.m[i][j]+=(a.m[i][k]*b.m[k][j])%Mod; c.m[i][j]%=Mod; } return c; } Matrix quickpow(long long n){ Matrix m=P,b=I; while(n>=1){ if(n&1) b=matrixmul(b,m); n=n>>1; m=matrixmul(m,m); } return b; } //矩阵快速幂 int main(){ //假设染到第i个方块时,红绿都是偶数的方案数是a(i) long long t,n; //红绿恰有一个是偶数的方案数是b(i),红绿都是奇数 Matrix A; //的方案数是c(i),因此可以推出3个递推式,分别为 scanf("%lld",&t); //a(i+1)=2*a(i)+b(i);b(i+1)=2*a(i)+2*b(i)+2*c(i); while(t--){ //c(i+1)=b(i)+2*c(i);从而推出矩阵,然后用矩阵快速幂 scanf("%lld",&n); //推出a(n),括号内为下标 A=quickpow(n); printf("%lld\n",A.m[0][0]); } return 0; }代码2:
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const long long mod=10007; long long quickmod(long long a,long b){ long long sum=1; while(b){ if(b&1) sum=(sum*a)%mod; a=(a*a)%mod; b>>=1; } return sum; } int main(){ //也可以用指数生成函数做 long long t,n,ans; //生成函数为: scanf("%I64d",&t); // (1+x^2/2!+x^4/4!+...)²*(1+x+x^2/2!+x^3/3!+...)² while(t--){ //=[0.5(e^x+e^-x)]²*e^2x scanf("%I64d",&n); //=1/4*(e^4x+e^2x+1) ans=quickmod(2,n-1); //=1/4∑((4x)^n/n!)+1/2∑((2x)^n/n!)+1/4 printf("%I64d\n",(ans*(ans+1))%mod); //因此an=4^(n-1)+2^(n-1)=2^(n-1)*(2^(n-1)+1) } //之后就是快速幂 return 0; }
相关文章推荐
- 信1407-2班20142897程怀远 课后题第一小题 10.17
- [PAT (Advanced Level) ]1011. World Cup Betting 解题文档
- c总结2 ---自己实现字符串的拷贝(指针学习1)
- AsyncTask的用法
- 邮件服务器DNS设置-----MX、SPF、DKIM记录详解
- 小感悟
- Django1.8 关于 静态文件配置
- OBJ文件格式
- Js中获取超链接里面传递的参数值
- java
- poj(3254)——Corn Fields
- 闪回delete 恢复
- 也谈virtual
- leedcode: Course Schedule
- uint8_t 头文件为#include<stdint.h>
- 数组随机排序
- [Leetcode] Binary Tree Paths, Solution
- Merge Intervals
- 【图像处理】数字图像处理软件-特效--光晕特效(五)
- 黑马程序员--指向指针的指针 写的非常好 适合0基础菜鸟