题面

这个题暴好啊,考了很多东西。

首先设f(x)为离终点还有x步要走的期望步数,我们可以发现 :

1.x>=k时,x可以转移到的点的下标都<x。

2.x<k时,则可能走回到x或者下标更大的点。

因为k特别小,所以我们可以把 f(0) (显然是0),f(1),f(2),.....,f(k-1) 暴力高斯消元出来 (这个你们不会的话可以试着把每个0<x<k的x的等式写出来,然后把f(x)项全移到左边,其他项全移到右边,就可以得到一个方程;这样可以列k-1个方程,正好k-1个未知数,高斯消元模板)。

这样我们就解决了2.情况。于是对于大量1.情况,我们便可以用2.情况推的下标比较小的f() 做矩阵乘法。

所以这就是两个题:先建一个矩阵然后高斯消元,再建一个然后矩阵快速幂,最后再做一次向量乘矩阵就可以得到答案了。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=23,ha=1000000007;inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;}
inline void ADD(int &x,int y){ x+=y; if(x>=ha) x-=ha;}inline int ksm(int x,int y){int an=1;for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha;return an;
}int k,inv,Inv,ans;
ll n;struct node{int a[N][N];inline void clear(){ memset(a,0,sizeof(a));}inline void Base(){clear();for(int i=0;i<=k;i++) a[i][i]=1;}node operator *(const node &u)const{node r; r.clear();for(int l=0;l<=k;l++)for(int i=0;i<=k;i++)for(int j=0;j<=k;j++) ADD(r.a[i][j],a[i][l]*(ll)u.a[l][j]%ha);return r;}inline void build(){clear(),a[k][k]=1;for(int i=1;i<k;i++){a[i][k]=(i*2>k)?1:k*(ll)Inv%ha,a[i][i]=1;for(int j=1,to;j<=k;j++){to=i-j;if(to<0) to=-to;if(to&&to!=i) ADD(a[i][to],ha-((i*2>k)?inv:Inv));}}}inline void solve(){for(int i=1,ne;i<k;i++){for(int j=i;j<k;j++) if(a[j][i]){ ne=j; break;}if(ne!=i) for(int l=i;l<=k;l++) swap(a[ne][l],a[i][l]);int ni=ksm(a[i][i],ha-2),now;for(int j=i+1;j<k;j++){now=ni*(ll)a[j][i]%ha;for(int l=i;l<=k;l++) ADD(a[j][l],ha-a[i][l]*(ll)now%ha);}}for(int i=k-1;i;i--){for(int j=i+1;j<k;j++) ADD(a[i][k],ha-a[i][j]*(ll)a[j][k]%ha);a[i][k]=a[i][k]*(ll)ksm(a[i][i],ha-2)%ha;
//          printf("%d %d\n",i,a[i][k]);}}inline void init(){clear();for(int i=k-2;i>=0;i--) a[i+1][i]=1;for(int i=0;i<k;i++) a[i][k-1]=inv;a[k][k-1]=1,a[k][k]=1;}
}A,X,ANS;int main(){scanf("%lld%d",&n,&k),inv=ksm(k,ha-2),Inv=ksm(k-1,ha-2);if(k==1){ printf("%d\n",n%ha); return 0;}A.build(),A.solve(),X.init();n-=k-1,ANS.Base();for(;n;n>>=1,X=X*X) if(n&1) ANS=ANS*X;for(int i=0;i<=k;i++) ADD(ans,A.a[i][k]*(ll)ANS.a[i][k-1]%ha);printf("%d\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/JYYHH/p/11265471.html

CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)E相关推荐

  1. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)比赛总结

    CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)比赛总结 总结: ​ 这场比赛不太顺心,B,I水题 10分钟内A了.A题推公式用double写卡了1个小时,换成其他暴力 ...

  2. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)

    感觉自己代码能力好弱啊 T1 完全k叉树 传送门 Solution 首先特判一下K=1K=1K=1 然后处理出最大满KKK叉树,设这棵树的深度为rankrankrank,根节点的深度为000,这个时候 ...

  3. Comet OJ CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)

    Preface 在一个月黑风高的夜晚我这个蒟蒻正踌躇着打什么比赛好 是继续做一场AGC,还是去刷一场CF 然后,一道金光闪过(滑稽),我们的红太阳bzt给我指明了方向: 你太菜了,我知道有一场很水的比 ...

  4. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)E.飞行棋(期望dp+矩阵快速幂)

    题目 飞行棋的规则如下: 1.每名玩家有一个棋子,每个回合可以掷一次骰子. 2.如果使用的骰子为 k面,则这 k面上的点数分别为 1,2,3,-,k,且掷得每种点数的概率均为​. 3.如果当前回合掷得 ...

  5. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) 飞行棋

    https://www.cometoj.com/contest/59/problem/E?problem_id=2714 思路:高斯消元求dp[1]~dp[k-1];然后利用递推式矩阵快速幂求出dp[ ...

  6. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)部分题解

    茶颜悦色 题意 固定kkk的矩形,能最多框住多少个点. 题解 假如我们固定一个矩形,以左下角为坐标. 这样子对于(a,b)(a,b)(a,b),那么能够包括到这个点的矩形左下角的范围: x∈(a−k, ...

  7. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)A——完全k叉树

    题目描述 欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢"唱,跳,rap,篮球"的篮球协会,更奇特的是--让人耳目一新的攀树协 ...

  8. A 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019))

    题目描述 欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢"唱,跳,rap,篮球"的篮球协会,更奇特的是--让人耳目一新的攀树协 ...

  9. 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) A)

    题目描述 欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢"唱,跳,rap,篮球"的篮球协会,更奇特的是--让人耳目一新的攀树协 ...

最新文章

  1. 拜托别在问我 MySQL 性能优化了!
  2. crontab 只执行一次_linux计划任务-单次任务(at)与循环任务(crontab)
  3. 判断触发器正在处理的是插入,删除还是更新触发
  4. 配置nginx支持php
  5. 快速了解一门技术的基本步骤
  6. 使用acs-engine在Azure中国区部署kubernetes集群详解
  7. epublib java_使用Epublib处理epub文件 | 学步园
  8. HTML作业-潮流服装网页
  9. intel CPU详解
  10. springboot高校教室排课系统的设计与实现毕业设计-附源码221556
  11. 小米pro 笔记本 计算机,小米笔记本Pro 15
  12. 了解RecyclerView的分割线
  13. HTML网页图片滚动代码
  14. 【黑马程序员pink老师前端】HTML
  15. (附源码)springboot物联网智能管理平台 毕业设计 211120
  16. 完美邮箱(@88.com/@111.com/email.cn):专用密码登录
  17. 新中大连接服务器文件,新中大软件服务器地址修改
  18. APP消息推送方案调研
  19. [NLP --- 3] 文档检索算法TF-IDF
  20. 【网络通信三】研华网关Modbus服务设置

热门文章

  1. 帝国cms数据库php调用tag,帝国CMS列表内容模板调用TAG的两种方法
  2. 周期三角波频谱图_雷达物位计厂家告诉你,什么是调频连续波雷达物位计
  3. mysql一些常用操作_MySQL常用操作
  4. C语言 底层IO openclose
  5. 2.4 理解指数加权平均
  6. opencv 数学操作
  7. pyplot.annatate
  8. Python SQLite3库
  9. Excel Txt 字符集设置
  10. SQL中GROUP BY的理解