vijos 1049 送给圣诞夜的礼品
来源:互联网 发布:易语言漂亮ui界面源码 编辑:程序博客网 时间:2024/04/28 06:19
这题是基础了,无耐C++驾驭能力不高...线性代数也弱
//矩阵与置换之间的关系//不用写=//小心函数的本地指代//函数用完内存全释放//把指数想象成二进制数就可以理解了//单位矩阵别搞错了
//time=0的时候彻底被坑了#include<cstdio>#include<cstring>using namespace std;typedef class matrix{ public: int num[102][102],n,m; void init(void) { memset(num,0,sizeof(num)); } friend matrix operator *(matrix &,matrix &);}matrix; matrix operator *(matrix &a,matrix &b){ int i,j,t; matrix tem; tem.n=a.n; tem.m=b.m; for(i=0;i<a.n;i++) for(j=0;j<b.m;j++) { tem.num[i][j]=0; for(t=0;t<a.m;t++) tem.num[i][j]+=a.num[i][t]*b.num[t][j]; } return tem;}matrix tem,big,small,num;int main(void){ int i,j,n,m,k,time,end,x; scanf("%d%d%d",&n,&m,&k); num.n=n;num.m=1; for(i=0;i<n;i++) num.num[i][0]=i+1; big.init(); small.init(); end=k%m;time=k/m; big.n=big.m=n; for(i=0;i<n;i++) { scanf("%d",&x); x--; big.num[i][x]=1; } if(end==1) small=big; for(i=1;i<m;i++) { tem.init(); tem.n=tem.m=n; for(j=0;j<n;j++) { scanf("%d",&x); x--; tem.num[j][x]=1; } big=tem*big; if(i==end-1) small=big; } if(!end) { small.n=small.m=n; for(i=0;i<n;i++) small.num[i][i]=1; } tem.n=tem.m=n; tem.init(); for(i=0;i<n;i++) tem.num[i][i]=1; while(time) { if(time&1)tem=tem*big; big=big*big; time>>=1; } big=tem; num=big*num; num=small*num; for(i=0;i<n;i++)printf("%d ",num.num[i][0]); printf("\n"); return 0;}
- vijos 1049 送给圣诞夜的礼品
- VIJOS 1049 送给圣诞夜的礼品(矩阵快速幂)
- [Vijos 1049] 送给圣诞夜的礼品 · 矩阵乘法
- 送给圣诞夜的礼品
- vijosP1049 送给圣诞夜的礼品
- vijos1049 送给圣诞夜的礼品
- voj 1049 送给圣诞夜的礼品 矩阵快速幂
- 【vijos1049】【矩阵乘法】送给圣诞夜的礼品
- vijos1049——送给圣诞夜的礼品
- vijos 1051 送给圣诞夜的极光
- Vijos 1051 送给圣诞夜的极光
- vijos P1051 送给圣诞夜的极光
- 【宽搜】Vijos P1051 送给圣诞夜的极光
- Vijos 送给圣诞夜的极光(bfs)
- vijos 1048 送给圣诞夜的贺卡 dfs
- vijos1049送给圣诞夜的礼品 矩阵快速幂
- 矩阵——vijos1049送给圣诞夜的礼品
- vijos1049 送给圣诞夜的礼品(矩阵倍增)
- 串行接口(交叉线和直连线的区别)
- 考进中科院计算所:我的经历和体会
- 学习OpenCV——车牌检测(定位)
- UML学习(一)
- Mshflexgrid控件填写数据时的添加方式的改变,加快数据读取速度.
- vijos 1049 送给圣诞夜的礼品
- android 永远锁屏解决方法
- jsp写九九乘法表
- 纹理分类(一)全局特征
- 好东西,记下来
- SDAUP 005
- Android上的Back键事件捕获
- C# 序列化 事例
- istringstream用法