【codejam2008_Round1A_C】Numbers
来源:互联网 发布:酷狗上传的歌网络异常 编辑:程序博客网 时间:2024/06/09 14:54
题目大意:
计算
题解:
题解原网址https://code.google.com/codejam/contest/32016/dashboard#s=a&a=2
设
可证明
∴
Solution1:(共轭)
设
又
初始状态:
可使用矩阵快速幂,时间复杂度
方法2:
所以α和β是
两式相加,得:
所以可使用矩阵乘法:
方法3:(方法2存在循环,可优化)
我们只需要最后结果的最后3位,经过法2的多次计算后发现,结果从
如果n很大,输出
代码:
#include<cstdio>#include<vector>using namespace std;typedef vector<int> Vector;typedef vector<Vector> Matrix;Matrix operator * (Matrix a,Matrix b){ int as1=a.size(),as2=a[0].size(),bs1=b.size(),bs2=b[0].size(); if(as2!=bs1) return Matrix(0,Vector(0)); Matrix ret(as2,Vector(bs1,0)); for(int i=0;i<as1;i++) for(int j=0;j<bs2;j++) for(int k=0;k<as2;k++) ret[i][j]=(ret[i][j]+(a[i][k]*b[k][j])%1000)%1000; return ret;}Matrix pow(Matrix a,int b){ Matrix c(a.size(),Vector(a.size(),0)); for(int i=0;i<(int)a.size();i++) c[i][i]=1; for(;b;b>>=1,a=a*a) if(b&1) c=c*a; return c;}namespace SolutionA{ int solve(int n) { Matrix a(2,Vector(2,0)); a[0][0]=3;a[0][1]=5; a[1][0]=1;a[1][1]=3; a=pow(a,n); return (a[0][0]*2+999)%1000; }}namespace SolutionB{ int solve(int n) { Matrix b(2,Vector(2)); b[0][0]=6;b[0][1]=-4; b[1][0]=1;b[1][1]=0; b=pow(b,n); int ret=b[1][0]*6+b[1][1]*2+999; while(ret<0) ret+=1000; return ret%1000; }}namespace SolutionC{ int solve(int n) { if(n>103) n=(n-3)%100+3; return SolutionB::solve(n); }}int main(){ int T,n; scanf("%d",&T); for(int i=1;i<=T;i++) { scanf("%d",&n); //printf("Case #%d: %03d\n",i,SolutionA::solve(n)); //printf("Case #%d: %03d\n",i,SolutionB::solve(n)); printf("Case #%d: %03d\n",i,SolutionC::solve(n)); } return 0;}
阅读全文
1 0
- 【codejam2008_Round1A_C】Numbers
- Numbers
- Numbers
- Numbers
- Numbers
- Numbers
- Ugly Numbers
- Humble Numbers
- Humble Numbers
- Palindrom Numbers
- Niven Numbers
- Alien Numbers
- Alien Numbers
- Phone Numbers
- usaco_humble numbers
- Alien Numbers
- Alien Numbers
- hdu1058humble numbers
- 使用 aui 自带的图片轮播图,AJAX异步调用数据给它无法轮播问题
- StatisticsVariable
- Spring Boot动态监听jsp文件
- 用MDK建立STM32工程模板
- ARM 平台上的Linux系统启动流程
- 【codejam2008_Round1A_C】Numbers
- 常用命令
- PHP中关键字final和static
- 树莓派安装shadowsocks 服务器Docker 快速方法
- 拓扑图框架Jtopo
- 判断应用中某个activity是否存在
- PAT甲级 1128. N Queens Puzzle (20)
- c++函数重载的实现原理
- 去心邻域