ZOJ 2853 Evolution【矩阵快速幂】
来源:互联网 发布:union软件安卓版贴吧 编辑:程序博客网 时间:2024/05/22 07:54
题目链接
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1853
思路
题意是n个物种,m次进化,给你每次进化的变换P(i,j),表示每次有P(i,j)的i物种变到了j物种,给你每个物种的初始数量,问m次进化后,第n-1个物种的数量是多少。
这相当于对原来的物种数量做多次线性变换,我们定义一个矩阵,其中
注意矩阵有点大直接开在main里会爆栈,开到外面就好了。
还有据说参数如果是形参的话是储存在栈里的,参数太大会爆,改成引用就行了,我这里没爆就不改了。
然后有个小坑点就是四舍五入到整数,我一开始floor(ans+0.5)WA了,改成%.0f就对了,可能是精度误差问题,以后还是都用%.0f吧保险点。
AC代码
#include <bits/stdc++.h>using namespace std;struct matrix{ double mat[210][210]; int m,n; matrix(int h, int w) { for(int i=0 ; i<h ; ++i) for(int j=0 ; j<w ; ++j) mat[i][j]=0; m=h; n=w; } void reset(int h, int w) { for(int i=0 ; i<h ; ++i) for(int j=0 ; j<w ; ++j) mat[i][j]=0; m=h; n=w; } matrix friend operator * (matrix a, matrix b) { matrix ans(a.m , b.n); for(int i=0 ; i<ans.m ; ++i) { for(int j=0 ; j<ans.n ; ++j) { for(int k=0 ; k<a.n ; ++k) { ans.mat[i][j]+=a.mat[i][k]*b.mat[k][j]; } } } return ans; }};matrix a(200,200),b(200,1);int main(){ int n,m; while(scanf("%d%d",&n,&m),n||m) { a.reset(n,n); b.reset(n,1); for(int i=0 ; i<n ; ++i) { scanf("%lf",&b.mat[i][0]); } int T; scanf("%d",&T); double sum[210]; fill(sum,sum+210,1.0); for(int i=0 ; i<T ; ++i) { int x,y; double p; scanf("%d%d%lf",&x,&y,&p); a.mat[y][x]=p; sum[x]-=p; } for(int i=0 ; i<n ; ++i) { a.mat[i][i]=sum[i]; } matrix ans(n,n); for(int i=0 ; i<n ; ++i) { ans.mat[i][i]=1; } while(m) { if(m&1) { ans=ans*a; } a=a*a; m>>=1; } b=ans*b; printf("%.0f\n",b.mat[n-1][0]); } return 0;}
0 0
- 【矩阵快速幂】ZOJ 2853 Evolution
- zoj 2853 Evolution(矩阵快速幂)
- ZOJ 2853 Evolution[ 矩阵快速幂 ]
- zoj 2853 Evolution 矩阵快速幂
- ZOJ 2853 Evolution【矩阵快速幂】
- ZOJ 2853 Evolution【矩阵快速幂】
- 矩阵快速幂 ZOJ 2853 Evolution
- Evolution +zoj+矩阵快速幂
- ZOJ 2853 Evolution (矩阵快速幂+数学)
- zoj 2853 Evolution 矩阵
- ZOJ 2853 Evolution (矩阵块速幂)
- Evolution(矩阵快速幂)
- 矩阵快速幂ZOJ
- zoj 2853 Evolution
- zoj 2853 Evolution
- ZOJ 2853Evolution
- zoj 3497 矩阵快速幂
- zoj 3960(矩阵快速幂)
- 【Data Algorithms_Recipes for Scaling up with Hadoop and Spark】Chapter5 Order Inversion Pattern
- memcached 使用汇总
- lightoj 1220 - Mysterious Bacteria 【数学】
- 学历是铜牌,能力是银牌,人脉是金牌,思维是王牌
- 浅谈程序员职业规划
- ZOJ 2853 Evolution【矩阵快速幂】
- Bootstrap 输入框组
- Android中的5种数据存储方式
- 如何从菜鸟成长为(伪)架构师
- ndroid开发常见的错误汇总及开发经验技巧总结
- linux 安装nginx
- uva10795 A Different Task
- 配置Ubuntu14.04 下的java开发环境笔记
- 国内优秀Android学习资源