UVa 10655
来源:互联网 发布:深圳聚宝网络 编辑:程序博客网 时间:2024/06/10 03:03
祭奠下我又一个wa了20+次的题,(都是泪啊。~~),这个题的也其实就是一个矩阵快速幂,但是写的时候有一些小坑,比如数据都要取long long 的,改了后我还是 wa,其实是结构体的里的矩阵也要ll,然而这个 一直忘记改了,就这样一直wa。。。。。。。。。。。还有就是在重载 * 运算的时候的行列大小要搞对,m*n 的与n*p的相乘,可以得到m*p然后中间的变量k的值就是最大到第一个矩阵的列数或者第二个矩阵的行数。
最后还有一个地方有小坑,就是当p=q=0的时候,不要急着就退出了,因为这个时候a=b=0,那么输出可以是0,不要退出(虽然题目也告诉我要退出,但是就改了这么一个地方测试着交了一发,就会wa掉,= =!)(题目的意思应该是只包含两个0的,如果是0 0 k 这样三个的就继续正常进行咯?!= =?,感觉以后还是好好读题把。)
下面包含着两种写法(另外一个是递归的)
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;typedef long long ll;ll p,q,n;struct Mat { ll mat[5][5]; int r,c; //Mat(int _r,int _c):r(_r),c(_c) {};};Mat operator * (Mat a, Mat b) { Mat m; memset(m.mat, 0, sizeof(m.mat)); m.r=a.r; m.c=b.c; int i, j, k; for(i = 0; i < m.r; ++i) { // if(a.mat[i][k] <= 0) continue; //*** for(j = 0; j < m.c; ++j) { // if(b.mat[k][j] <= 0) continue; //*** for(k=0;k<a.c;++k) m.mat[i][j] = m.mat[i][j]+a.mat[i][k] * b.mat[k][j]; } } return m;}Mat operator ^ (Mat a, ll k) { Mat m; m.r=a.r; m.c=a.c; int i,j; for(i = 0; i < m.r; ++i) for(j = 0; j < m.c; ++j) m.mat[i][j] = (i == j); for(; k; k >>= 1) { if(k&1) m = m*a; a = a*a; } return m;}Mat multiply(Mat a,Mat b) { Mat m; m.r=a.r;m.c=a.c; for(int i=0;i<m.r;++i){ for(int j=0;j<m.c;++j){ m.mat[i][j]=0; for(int k=0;k<a.c;++k) m.mat[i][j]+=a.mat[i][k]*b.mat[k][j]; } } return m; }Mat matrix_pow(Mat m,int n) { if(n==0){ m.mat[0][0]=m.mat[1][1]=1; m.mat[0][1]=m.mat[1][0]=0; return m; } if(n==1) return m; Mat res=matrix_pow(m,n/2); res=multiply(res,res); if(n&1) res=multiply(res,m); return res; }int main(){ while(scanf("%lld%lld%lld",&p,&q,&n)==3) { if(n==0) { printf("2\n"); continue; } if(n==1) { printf("%d\n",p); continue; } Mat a; a.mat[0][0]=p; a.mat[0][1]=-q; a.mat[1][0]=1; a.mat[1][1]=0; a.r=2;a.c=2; Mat b; b.mat[0][0]=p*p-2*q; b.mat[1][0]=p; b.r=2;b.c=1; ll k=n-2; Mat tmp=a^k; tmp=tmp*b; ll sum=tmp.mat[0][0]; cout<<sum<<endl; } return 0;}
0 0
- UVa 10655
- 矩阵模板hdu5015,UVA 10655,UVA 11149
- UVA 10655 Contemplation! Algebra
- UVA 10655 Contemplation! Algebra
- UVa 10655 - Contemplation! Algebra
- UVA 10655 Contemplation! Algebra
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 单点登陆script传值
- java main函数的args[]参数
- 配置文件报错:不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
- Yarn的原理与资源调度
- 实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
- UVa 10655
- 如何有效清理Mac上的内存
- 关于java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY异常处理
- navicat导出表结构及数据
- 用Python统计新浪微博各种表情使用频率
- Couldn't read row 0, col -1 from CursorWindow, Cursor initialization error
- AndroidStudio中具体如何直接下载Github中的代码到指定路径
- ubuntu虚拟机做服务器 无法被别的windows系统访问的解决方法
- 较大数的hash算法