题目链接:https://www.cometoj.com/contest/59/problem/E?problem_id=2714

求期望并且一堆转移基本上就是期望dp了(叉腰

照常的设dp[i]表示i位置到n位置的期望步数。则我们所求的是dp[0]。

初始化dp[n]=0,因为n到n的期望为0。

之后先讨论下i为n-1到n-k的时候。

我们可以列出转移方程(随便写几个

$dp[n-1]=\tfrac{1}{k}*(dp[n]+dp[n-1]+dp[n-2]+\cdot \cdot \cdot +dp[n-k+1])+1$

$dp[n-2]=\tfrac{1}{k}*(dp[n-1]+dp[n]+dp[n-1]+\cdot \cdot \cdot +dp[n-k+2])+1$

$\cdot \cdot \cdot\cdot \cdot \cdot$

$dp[n-k]=\tfrac{1}{k}*(dp[n-k+1]+dp[n-k+2]+dp[n-k+3]+\cdot \cdot \cdot +dp[n])+1$

这时候自(mang)信(fu)同学可能就直接上高斯消元了,而善于发现的老哥则会很轻松的写出一组解,即:$dp[n-1]=dp[n-2]=dp[n-3]=\cdot \cdot \cdot =dp[n-k]=k$

之后再讨论下i为n-k-1到0的时候

就是很简单的转移:$dp[i]=\tfrac{1}{k}*(dp[i+k]+dp[i+k-1]+dp[i+k-2]+\cdot \cdot \cdot +dp[i+1])+1$

这里就可以直接矩阵快速幂优化。

先上一个8/15AC,7/15RE的不加速代码方便理解:

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + ;
const ll mod = ;
ll dp[maxn];
ll qpow(ll a, ll b) {
ll ans = ;
while (b) {
if (b & )ans = ans * a%mod;
a = a * a%mod;
b >>= ;
}
return ans;
}
int main() {
ll n, k;
cin >> n >> k;
ll inv = qpow(k, mod - );
dp[n] = ;
ll sum = ;
for (int i = n - ; i >= n - k; i--)
dp[i] = k, sum = (sum + dp[i]) % mod;
for (int i = n - k - ; i >= ; i--)
dp[i] = (sum * inv + ) % mod, sum = (sum - dp[i + k] + dp[i] + mod) % mod;
printf("%lld\n", dp[]);
}

之后是本题正解:(先咕咕一下

[CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)]飞行棋的更多相关文章

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

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

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

    题面 一开始想到一个 O(N^2) 做法,先把x排序,然后顺次枚举x最大的点,看向前最多可以保留多少点 (也就是先不管正方形的上下长度限制,先考虑左右的限制).然后再对这些点做一遍类似的..(等等这么 ...

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

    题面 F比较友善(相较于E),我们发现如果i和j是满足条件的两个下标,那么: a[i]-2*b[i] + a[j]-2*b[j] >=0 或者 b[i]-2*a[i] + b[j]-2*a[j] ...

  4. CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)E

    题面 这个题暴好啊,考了很多东西. 首先设f(x)为离终点还有x步要走的期望步数,我们可以发现 : 1.x>=k时,x可以转移到的点的下标都<x. 2.x<k时,则可能走回到x或者下 ...

  5. CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)H

    题面 被神葱安利安利了本题. 我们贪心的想,如果有那么一坨相等的学号,那么肯定是保留一个人学号不变,其余的再推到学号+1的位置(准备与那个位置的其他人合并)处理. 虽然a[i]可大至1e18,不过如果 ...

  6. CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)G

    题面 一道暴水的dp....别问我为什么直接打开了G题,我只是对题目名称感兴趣而已.... #include<bits/stdc++.h> #define ll long long usi ...

  7. Comet OJ 夏季欢乐赛 篮球校赛

    Comet OJ 夏季欢乐赛 篮球校赛 题目传送门 题目描述 JWJU注重培养学生的"唱,跳,rap,篮球"能力.于是每年JWJU都会举办篮球校赛,来给同学们一个切磋篮球技术的平台 ...

  8. Comet OJ 夏季欢乐赛 Gree的心房

    Comet OJ 夏季欢乐赛 Gree的心房 题目传送门 题目描述 据说每一个走进Gree哥哥心房的小姑娘都没有能够再走出来-- 我们将Gree哥哥的心房抽象成一个n \times mn×m的地图,初 ...

  9. Comet OJ 夏季欢乐赛 分配学号

    Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...

随机推荐

  1. zabbix命令之:zabbix_get命令

    zabbix_get命令是在server端用来检查agent端的一个命令,在添加完主机或者触发器后,不能正常获得数据,可以用zabbix_get来检查能否采集到数据,以便判断问题症结所在. zabbi ...

  2. springboot 集成p6spy

    pom.xml <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifact ...

  3. Django【第18篇】:Django之缓存

    Django 之缓存 一.缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存 ...

  4. Thymeleaf静态资源引入方式及公共页面代码抽取

    静态资源引入 Thymeleaf模板引擎url问题,要用如下的方式写,确保在任何情况下都能访问到 <!-- Bootstrap core CSS --> <link href=&qu ...

  5. 【LuoguP3329&4123】[ZJOI2011]最小割&[CQOI2016]不同的最小割

    链接1 链接2 题意简述 第一个题 : 问图中有多少不同的最小割数值 第二个题 : \(q\) 次询问图中多少对点对之间的最小割小于 \(x\) . Sol 两个都是模板题就放一起了. 求完最小割树直 ...

  6. ESP8266-利用网页控制ESP8266

    说明:发出/gpio/1   就输出 "亮灯":   /gpio/0  就输出 "灭灯"  #include <ESP8266WiFi.h> con ...

  7. 02-webpack的作用

    webpack的作用,将不同静态资源的类型打包成一个JS文件,在html页面应用该JS文件的时候,JS文件里的html就可以正常的运行,去执行操作. 也可以加载前端页面的CSS样式.Img图片

  8. Shell-04

    grep程序 Linux下文本处理三剑客-----grep sed awk sed:文本行编辑器(流编辑器)        awk:报告生成器(文本输出格式化)         grep:文本行过滤工 ...

  9. Element ui 中的Upload用法

    效果图: 代码:

  10. Activiti的分配任务负责人(八)

    1分配任务负责人 1.1 固定分配 在进行业务流程建模时指定固定的任务负责人 在 properties 视图中,填写 Assignee 项为任务负责人.注意事项由于固定分配方式,任务只管一步一步执行任 ...