博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cf 821E Okabe and El Psy Kongroo(矩阵快速幂)
阅读量:5055 次
发布时间:2019-06-12

本文共 1452 字,大约阅读时间需要 4 分钟。

链接:http://codeforces.com/problemset/problem/821/E

分析:由于有边界而且不同段边界还不同,直接算是不行的。。k是1e18,dp也不行。。用一个16维的向量表示某一列16个位置可能的种类数,到下一列的转移矩阵容易得到,而且在同一段里转移矩阵一样,直接用快速幂算出这一段结束的向量,然后继续推下一段结束的向量。注意特殊情况的处理。

1 #include
2 #include
3 using namespace std; 4 typedef long long ll; 5 const int maxn=105,p=1e9+7; 6 ll a[maxn],b[maxn],c[maxn]; 7 ll m[16][16],v[16]; 8 void initm(ll k){ 9 for(int i=0;i<16;i++)10 for(int j=0;j<16;j++)11 m[i][j]=0;12 m[0][0]=1;m[0][1]=1;13 for(int i=1;i
0){17 m[k][k]=1;m[k][k-1]=1;18 }else{19 m[0][1]=0;20 }21 }22 void Copy(ll a[16][16],ll b[16][16]){23 for(int i=0;i<16;i++)24 for(int j=0;j<16;j++)25 a[i][j]=b[i][j];26 }27 void multiply(ll ma[16][16],ll mb[16][16],ll ans[16][16]){28 ll a[16][16],b[16][16];29 Copy(a,ma);Copy(b,mb);30 for(int i=0;i<16;i++){31 for(int j=0;j<16;j++){32 ans[i][j]=0;33 for(int k=0;k<16;k++)34 ans[i][j]=(ans[i][j]+a[i][k]*b[k][j])%p;35 }36 }37 }38 void print(ll a[16][16]){39 for(int i=0;i<16;i++){40 for(int j=0;j<16;j++)41 cout<
<<' ';42 cout<
>n>>aim;80 for(int i=0;i
>a[i]>>b[i]>>c[i];82 if(i==n-1)b[i]=aim;83 Update(b[i]-a[i],c[i]);84 }85 cout<
<

 

转载于:https://www.cnblogs.com/7391-KID/p/7082055.html

你可能感兴趣的文章
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
dvwa网络渗透测试环境的搭建
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
过点(2,4)作一直线在第一象限与两轴围成三角形,问三角形面积的最小值?...
查看>>
java aes CBC的填充方式发现
查看>>
使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法
查看>>
BZOJ 2338 HNOI2011 数矩形 计算几何
查看>>
关于页面<!DOCTYPE>声明
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
C++标准库vector使用(更新中...)
查看>>
cocos2d-x 2.2.6 之 .xml文件数据读取
查看>>
枚举的使用
查看>>
BZOJ 1531 二进制优化多重背包
查看>>
BZOJ 2324 (有上下界的)费用流
查看>>
python3基础06(随机数的使用)
查看>>
Zookeeper系列(二)特征及应用场景
查看>>
【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
查看>>
Spring Boot使用Druid和监控配置
查看>>
poi 处理空单元格
查看>>
Android 内存泄漏优化总结
查看>>