pku 3735 Training little cats (矩阵幂乘)

题目来源:http://acm.pku.edu.cn/JudgeOnline/problem?id=3735

解题思路:

取向量b表示最后的结果,我这里对于n个数,构造n+1维的向量,目的是有利于后面的‘g’操作

 

对于每一次的操作用矩阵表示,这里的矩阵a是(n+1n+1),初始化为一个单位矩阵

g num 操作,表示使第num个数增加1,使矩阵a的第num行最后一个元素增加1,即a[num][last]+=1

e num 操作,表示使第num个数变为0,使矩阵a的第num行全部变为0

for(i=1:i<=last;i++) a[num][i]=0;

s num1num2操作,表示使第num1num2元素交换位置,使矩阵a 的第num1num2行互换就可以了for(i=1:i<=last;i++) swap(a[num1][i],a[num2][i]);

 

然后计算am次方

最后再与初始化的b向量进行一次乘法,得到的向量的1last-1即为所要求的结果

 

该题注意的地方:

1:矩阵乘法中做乘法前判断两个乘数是否均为0

2:构造矩阵a的过程,开始我是每进行一次操作就用一次矩阵乘法,导致超时,其实只要每次修改下矩阵就可以了

3:注意最后结果可能超过int的范围,要用__int64

看status里还有几个是0ms过的,不知道他们是用什么方法,还请知道的大牛指教!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值