cf 821E Okabe and El Psy Kongroo(矩阵快速幂)

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

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

 1 #include<iostream>
 2 #include<cstring>
 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<k;i++){
14         m[i][i-1]=m[i][i]=m[i][i+1]=1;
15     }
16     if(k>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<<a[i][j]<<' ';
42         cout<<endl;
43     }
44 }
45 void qpow(ll a[16][16],ll n,ll ans[16][16]){
46     ll k=1,y[16][16];
47     for(int i=0;i<16;i++){
48         for(int j=0;j<16;j++)
49             ans[i][j]=0;
50         ans[i][i]=1;
51     }
52     Copy(y,a);
53     while(k){
54         if(k&n){
55             multiply(ans,y,ans);
56             //print(ans);
57         }
58         multiply(y,y,y);
59         k<<=1;
60     }
61 }
62 void Update(ll n,int h){
63     initm(h);
64     ll M[16][16],v0[16];
65     memset(v0,0,sizeof(v0));
66     qpow(m,n,M);
67     for(int i=0;i<16;i++){
68         for(int j=0;j<16;j++){
69             v0[i]=(v0[i]+v[j]*M[i][j])%p;
70         }
71     }
72     for(int i=0;i<16;i++)v[i]=v0[i];
73 }
74 int main(){
75     int n;
76     ll aim;
77     memset(v,0,sizeof(v));
78     v[0]=1;
79     cin>>n>>aim;
80     for(int i=0;i<n;i++){
81         cin>>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<<v[0]<<endl;
86     return 0;
87 }

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

您是否能及时编译?

还记得上次被C开发人员嘲笑的时候吗&#xff1f; Java如此繁琐&#xff0c;以至于他们甚至都不会考虑使用这种语言&#xff1f; 在许多方面&#xff0c;这一概念仍然成立。 但是对于典型的用法&#xff08;在大型企业的骨干中&#xff09;&#xff0c;Java性能绝对可以与许多竞…

C语言作业二选择结构,C语言第二次作业参考答案选择结构.pdf

1 C 语言第二次作业(选择结构)参考答案语言第二次作业(选择结构)参考答案 1、某年如果能被某年如果能被 4 整除整除&#xff0c;&#xff0c;但不能被但不能被 100 整除整除&#xff0c;&#xff0c;或者能被或者能被 400 整除的整除的 年是闰年。判断从键盘输入的年份是否为闰…

2d物理引擎01

我一直想做一个游戏&#xff0c;但一直感觉自己水平不够 想了想觉得不去做的话就永远做不出来 所以有了这个博文 01 我需要一个东西来显示&#xff0c;很显然h5中canvas是很好的选择 <!DOCTYPE html> <html><head><meta charset"utf-8" />&l…

python结课设计力学方面_我对力学教案的评价

这是来自某教学网站的高一物理力学教案&#xff1a;[高一物理教案1.1.1]第一章 力1&#xff0e;1 力一、教学目标1&#xff0e;知识目标⑴知道力是物体对物体的作用&#xff0c;力不能脱离物体而存在&#xff1b;能正确找出受力物体和施力物体。⑵知道力是有方向的量&#xff…

Liferay Model Hints

这篇文章主要介绍如何通过model hint 来修改liferay builder service生成数据库表中默认字段的长度。 1.什么是Model Hints? 它是对liferay builder service生成的model类的基本提示. 2. 它在什么地方被定义的&#xff1f; portlet-model-hints.xml 3. 文件位置&#xff1f; /…

浏览器书签备份管理

1、火狐浏览器备份导出HTML文件&#xff1a; CtrlJ 书签 - 导入/导出 2、谷歌浏览器&#xff1a; 设置中 导入书签 转载于:https://www.cnblogs.com/AmbiguousMiao/p/8084721.html

选择您的收藏库

这真的是您应该烦恼的吗&#xff1f; java.util.ArrayList和java.util.HashMap从根本上有问题吗&#xff1f; 对于大多数源代码&#xff0c;答案是–不&#xff1b; 这些实现完全可以。 但是&#xff0c;一如既往&#xff0c;细节决定成败。 并存在情况下&#xff0c;当是内置…

里公式后面标号怎么对齐_你若会用Word里F4键,又何须加班到半夜?

F4键在Word里面表示重复上一个操作&#xff0c;但对于这个快捷键&#xff0c;你真的会操作吗&#xff1f;本期与大家分享这个神奇的F4键&#xff0c;助你高效工作。1、批量复制文本在一般情况下&#xff0c;我们是用CtrlC复制内容&#xff0c;CtrlV粘贴内容&#xff0c;但遇到特…

全方位分析web前端如何进行性能优化

前言&#xff1a; 最近刚刚完成项目&#xff0c;空闲一段时间&#xff0c;想起之前有被问起怎么对前端进行性能优化&#xff0c;自己也是脑中零零散散的总不成体系&#xff0c;现特来总结&#xff0c;欢迎补充指教。 1、整体资源 &#xff08;1&#xff09;js、css源码压缩 &a…

DshanMCU-R128s2 SDK 架构与目录结构

R128 S2 是全志提供的一款 M33(ARM)C906(RISCV-64)HIFI5(Xtensa) 三核异构 SoC&#xff0c;同时芯片内部 SIP 有 1M SRAM、8M LSPSRAM、8M HSPSRAM 以及 16M NORFLASH。 本文档作为 R128 FreeRTOS SDK 开发指南&#xff0c;旨在帮助软件开发工程师、技术支持工程师快速上手&am…

数据导出

数据导出和数据导入刚好是相反的&#xff0c;把逻辑反过来就可以了。 源码&#xff1a;https://github.com/SeaLee02/FunctionModule/blob/master/UploadFiles/WebDemo/COM/DataToOut.aspx 效果&#xff1a; 然后勾选需要导出的数据&#xff0c;生成Excel 部分前台&#xff1a;…

c语言清空输入缓冲区函数,c语言:C语言清空输入缓冲区在标准输入(stdin)情况 -电脑资料...

C语言清空输入缓冲区在标准输入(stdin)情况下的使用程序1&#xff1a;//功能&#xff1a;先输入一个数字&#xff0c;再输入一个字符&#xff0c;输出hello bit#include int main(){int num 0;char ch ;scanf("%d", &num);scanf("%c", &ch);pri…

Spring MVC 3:上传多个文件

只是在办公室又漫长的一天&#xff0c;数据库不可用&#xff0c;一个团队成员现在滞后一周。 因此&#xff0c;我们必须作为一个团队来交付它。 在Spring3&#xff0c;它看起来很直接上传文件。 但是&#xff0c;从jsp文件上载多个文件几乎没有帮助。 上载多个文件需要完成三件…

spring 事务隔离级别和传播行为_Spring事务传播性与隔离性实战

一、事务传播性1.1 什么是事务的传播性事务的传播性一般在事务嵌套时候使用&#xff0c;比如在事务A里面调用了另外一个使用事务的方法&#xff0c;那么这俩个事务是各自作为独立的事务执行提交&#xff0c;还是内层的事务合并到外层的事务一块提交那&#xff0c;这就是事务传播…

前端为什么非要动静分离 说一下CDN托管的意义

大型Web应用对速度的追求并没有止步于仅仅利用浏览器缓存&#xff0c;因为浏览器缓存始终只是为了提升二次访问的速度&#xff0c;对于首次访问的加速&#xff0c;我们需要从网络层面进行优化&#xff0c;最常见的手段就是CDN&#xff08;Content Delivery Network&#xff0c;…

unity语音聊天之 www.GetAudioClip

最近在开发语音聊天功能,游戏需要跨平台安卓与ios&#xff0c;上传本地录制的wav文件至服务器后&#xff0c;需要根据服务器返回的地址进行语音文件的下载并进行播放。 这里通过使用www进行下载并播放 其中在ios播放时却不行了&#xff0c;查询官方文档后发现&#xff0c;ios必…

轻谈BFC

BFC 定义 CSS2.1的定义 Block formatting contexts 9.4.1 Block formatting contexts Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with overflow other …

Java中的Selenium / WebDriver示例

几年前&#xff0c;我正在忙于一些工作&#xff0c;客户希望了解如何解决现实世界中的问题。 他们要求我自动化woot.com网站上的某些任务。 他们的任务是访问各个网站&#xff0c;并阅读当天商品的名称和价格。 我写了一些Selenium代码&#xff0c;以为可以将其张贴在这里&am…

c语言中怎样实现空格的替换,C语言实现去除字符串中空格的简单实例

在网上看了些去除空格的代码,觉得都不是很简洁,就自己写代码实现它本着高效率,不使用额外存储空间的想法实现该功能去除空格一共有三种&#xff1a;1、去除全部空格&#xff1b;2、一种是去除左边空格&#xff1b;3、去除右边空格想去除左右两边空格&#xff0c;只要先去除左边…

python消息队列中间件_python-RabbtiMQ消息队列

1.RabbitMQ简介AMQP&#xff0c;即Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff0c;是应用层协议的一个开放标准&#xff0c;为面向消息的中间件设计。消息中间件主要用于组件之间的解耦&#xff0c;消息的发送者无需知道消息使用者的存在&#xff…