博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2013长沙邀请赛A So Easy!(矩阵快速幂,共轭)
阅读量:6331 次
发布时间:2019-06-22

本文共 1909 字,大约阅读时间需要 6 分钟。

So Easy!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2286    Accepted Submission(s): 710
Problem Description
  A sequence S
n is defined as:
Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate S
n.
  You, a top coder, say: So easy! 
 
Input
  There are several test cases, each test case in one line contains four positive integers: a, b, n, m. Where 0< a, m < 2
15, (a-1)
2< b < a
2, 0 < b, n < 2
31.The input will finish with the end of file.
 
Output
  For each the case, output an integer S
n.
 
Sample Input
2 3 1 2013 2 3 2 2013 2 2 1 2013
 
Sample Output
4 14 4
 
挑战程序设计竞赛P268,关键是求初始矩阵:
an+1 = a*an+b*bn;
bn+1 = an+a*bn;
a[0][0],a[0][1]分别是公式1里面的系数,a和b;
a[1][0],a[1][1]分别是公式2里面的系数,1和a;
然后就是矩阵快速幂了:
 
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #define M(a,b) memset(a,b,sizeof(a)) 8 typedef long long LL; 9 10 using namespace std;11 12 13 long long a,b,n,m;14 15 struct matrix16 {17 LL mat[2][2];18 void init()19 {20 mat[0][0] = a;21 mat[0][1] = b;22 mat[1][0] = 1;23 mat[1][1] = a;24 }25 };26 27 matrix mamul(matrix aa,matrix bb)28 {29 matrix c;30 for(int i = 0;i<2;i++)31 {32 for(int j = 0;j<2;j++)33 {34 c.mat[i][j] = 0;35 for(int k = 0;k<2;k++)36 c.mat[i][j]+=(aa.mat[i][k]*bb.mat[k][j]);37 c.mat[i][j]%=m;38 }39 }40 return c;41 }42 43 matrix mul(matrix s, int k)44 {45 matrix ans;46 ans.init();47 while(k>=1)48 {49 if(k&1)50 ans = mamul(ans,s);51 k = k>>1;52 s = mamul(s,s);53 }54 return ans;55 }56 57 int main()58 {59 while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&m)==4)60 {61 matrix ans;62 ans.init();63 ans = mul(ans,n-1);64 printf("%I64d\n",(ans.mat[0][0]*2+m)%m);65 }66 return 0;67 }

 

 

转载于:https://www.cnblogs.com/haohaooo/p/4019934.html

你可能感兴趣的文章
Redis和消息队列使用实战
查看>>
ORB-SLAM2 with Kinect V1
查看>>
如果选择构建ui界面方式,手写代码,xib和StoryBoard间的博弈
查看>>
实现表格分页
查看>>
Number Sequence HDU - 1711 (Hash或KMP)
查看>>
js保留两位小数方法总结
查看>>
20145234黄斐《Java程序设计》实验一—Java开发环境的熟悉(Linux + Eclipse)
查看>>
commont-net.jar 代码结构图
查看>>
从零开始机器学习比赛经验(bird分享)
查看>>
LiveUpdate Adminstrator配置手册
查看>>
[转]推荐分享22个优秀的项目管理与协作工具
查看>>
php tcp socket 学习汇总
查看>>
浪潮之巅第十一章 — 幕后的英雄:风险投资(Venture Capital)
查看>>
了解Flex 新框架 Robotlegs(2)initial
查看>>
HTML5之语义标签
查看>>
javascript下将字符类型转换成布尔值
查看>>
常用问题库(2)
查看>>
快速查询Python脚本语法
查看>>
POJ 1562:Oil Deposits
查看>>
JavaScript学习历程和心得
查看>>