[AtCoder Regular Contest 124E] Pass to Next(dp+数学)

ARC 124 E Pass to Next

  • problem
  • solution
  • code

problem

题目链接

solution

ci:c_i:ci:iii 个人传给下一个人球的个数

min⁡{ci}≠0\min\{c_i\}\neq 0min{ci}=0 时,将每一个 cic_ici 都减小 111,显然答案序列并不会改变

所以,我们只需要考虑 min⁡{ci}=0\min\{c_i\}=0min{ci}=0 的情况

这样性质的 ccc 序列一共有 ∏i=1n(ai+1)−∏i=1nai\prod_{i=1}^n(a_i+1)-\prod_{i=1}^na_ii=1n(ai+1)i=1nai 种,每一种都会导致最后不同的结果序列

至少有一个人是不传球的方案数:总方案数−-每个人都传球的方案数(将 +1+1+1 看作不传球)

∏i=1nxi=∏i=1n(xi1):\prod_{i=1}^nx_i=\prod_{i=1}^n\binom{x_i}{1}:i=1nxi=i=1n(1xi): 理解成每个人传完球后,从手里剩下的球中选一个的方案数

所以,我们就可以设计 dpi,0/1dp_{i,0/1}dpi,0/1 转移了

  • dpi,0:dp_{i,0}:dpi,0:iii 个人从自己原有的球上选一个,前 i−1i-1i1 个人的方案数
  • dpi,1:dp_{i,1}:dpi,1:iii 个人从第 i−1i-1i1 个人给的球中选一个,前 iii 个人的方案数

因为是同时一起给下一个人球的,所以每个人手中原本的球可以看成时一种来源,不同来源球直接的分配是相互独立的,前一个人传递过来多少与自己传递多少出去是互不干扰的

  • dpi+1,0←dpi,0⋅ai(ai+1)2dp_{i+1,0}\leftarrow dp_{i,0}·\frac{a_i(a_i+1)}{2}dpi+1,0dpi,02ai(ai+1)

    由于 dpi,0dp_{i,0}dpi,0 没有算 iii 的贡献,转移时要加上;且这种情况 iii 时从自己手上剩的球中选一个

    如果剩下 xxx 个就有 xxx 种选法,而 x∈[1,ai]x\in[1,a_i]x[1,ai],所以方案数为 ∑x=1aix\sum_{x=1}^{a_i}xx=1aix

  • dpi+1,0←dpi,1⋅(ai+1)dp_{i+1,0}\leftarrow dp_{i,1}·(a_i+1)dpi+1,0dpi,1(ai+1)

    由于 dpi,1dp_{i,1}dpi,1 已经算了 iii 的贡献,转移只需要考虑 i→i+1i\rightarrow i+1ii+1 的球数,且此情况下先不计算 i+1i+1i+1 在自己手上选球的贡献

    传递 0,1,...,ai0,1,...,a_i0,1,...,ai 个一共是 ai+1a_i+1ai+1 种方案

  • dpi+1,1←dpi,0⋅(ai⋅ai(ai+1)2−ai(ai+1)(2ai+1)6)dp_{i+1,1}\leftarrow dp_{i,0}·\Big(a_i·\frac{a_i(a_i+1)}{2}-\frac{a_i(a_i+1)(2a_i+1)}{6}\Big)dpi+1,1dpi,0(ai2ai(ai+1)6ai(ai+1)(2ai+1))

    由于 i,i+1i,i+1i,i+1 的贡献都没有计算,转移时要一起加上

    如果 iii 传递了 xxx 个,那么就还剩下 ai−xa_i-xaix 个,iii 是从自己手中选,则有 ai−xa_i-xaix 中选法,i+1i+1i+1 是从 iii 传的球中选一个,则有 xxx 种选法

    所以总方案数为 ∑x=1aix(ai−x)=ai⋅∑x=1ai−∑x=1aix2=ai⋅ai(ai+1)2−ai(ai+1)(2ai+1)6\sum_{x=1}^{a_i}x(a_i-x)=a_i·\sum_{x=1}^{a_i}-\sum_{x=1}^{a_i}x^2=a_i·\frac{a_i(a_i+1)}{2}-\frac{a_i(a_i+1)(2a_i+1)}{6}x=1aix(aix)=aix=1aix=1aix2=ai2ai(ai+1)6ai(ai+1)(2ai+1)

  • dpi+1,1←dpi,1⋅ai(ai+1)2dp_{i+1,1}\leftarrow dp_{i,1}·\frac{a_i(a_i+1)}{2}dpi+1,1dpi,12ai(ai+1)

    由于已经计算了 iii 的贡献,所以只需要考虑 i+1i+1i+1 的贡献

    i+1i+1i+1 选的是 iii 传递的球,如果 iii 传了 xxx 个,那么就有 xxx 种选择,方案数为 ∑x=1aix=ai(ai+1)2\sum_{x=1}^{a_i}x=\frac{a_i(a_i+1)}{2}x=1aix=2ai(ai+1)

最后因为是个环,所以初始应该钦定 111 的选择

显然这个 dpdpdp 的过程并没有考虑 min⁡{ci}=0\min\{c_i\}=0min{ci}=0 的限制,而是随意转移

所以利用容斥,减去强制至少转移一个球的方案数,就对应着至少有一个人的 ci=0c_i=0ci=0 的方案数

具体而言:

  • iii 从自己手上剩的球选择,剩的球就被限制为了 1,2,...,ai−11,2,...,a_{i-1}1,2,...,ai1

    转移变为 dpi+1,0←dpi,0⋅ai(ai−1)2dp_{i+1,0}\leftarrow dp_{i,0}·\frac{a_i(a_i-1)}{2}dpi+1,0dpi,02ai(ai1)

  • iii 传递给 i+1i+1i+1 至少都是一个球 1,2,...,ai1,2,...,a_i1,2,...,ai

    转移变为 dpi+1,0←dpi,1⋅aidp_{i+1,0}\leftarrow dp_{i,1}·a_idpi+1,0dpi,1ai

  • case3 case4 的转移,因为为了使 (x1)\binom{x}{1}(1x) 有意义,所以 xxx 自带条件就是 ≥1\ge 11,转移不变

code

#include <cstdio>
#include <cstring>
#define int long long
#define mod 998244353
#define maxn 300005
const int inv2 = ( mod + 1 ) / 2;
const int inv6 = ( mod + 1 ) / 6;
int n;
int a[maxn];
int dp[maxn][2];int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans;
}int solve( int o, int k ) {memset( dp, 0, sizeof( dp ) );dp[1][o] = 1;for( int i = 1, x, g, f;i <= n;i ++ ) {x = a[i] - k;g = x * ( x + 1 ) % mod * inv2 % mod;dp[i + 1][0] = ( dp[i][0] * g + dp[i][1] * ( x + 1 ) ) % mod;x = a[i];g = x * ( x + 1 ) % mod * inv2 % mod;f = x * ( x + 1 ) % mod * ( x << 1 | 1 ) % mod * inv6 % mod;dp[i + 1][1] = ( ( a[i] * g - f ) % mod * dp[i][0] + dp[i][1] * g ) % mod;}return dp[n + 1][o];
}signed main() {scanf( "%lld", &n );for( int i = 1;i <= n;i ++ ) scanf( "%lld", &a[i] );printf( "%lld\n", ( ( solve( 1, 0 ) + solve( 0, 0 ) - solve( 0, 1 ) - solve( 1, 1 ) ) % mod + mod ) % mod );return 0;
}

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

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

相关文章

P2015 二叉苹果树

P2015 二叉苹果树 题意&#xff1a; 一个完全二叉树&#xff0c;n个点&#xff0c;n-1个边&#xff0c;每个边都有边权&#xff0c;问保留q个边&#xff0c;所能保留的最大边权是多少 题解&#xff1a; 树形dp dp[u][i]表示u的子树上保留i条边&#xff0c;至多保留的苹果数…

P4384 [八省联考 2018] 制胡窜(SAM)

Foreword\text{Foreword}Foreword 人都道正难则反&#xff0c;我偏说正也不难。 这里介绍一种正面直接统计的做法。 和补集做法相比&#xff0c;没有那么多的分类讨论&#xff0c;更多的是对问题的正向分析和逐层化简、转化&#xff0c;也并不麻烦。 由于需要写很多线段树的操作…

【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能

首先说声抱歉&#xff0c;可能是因为假期综合症&#xff08;其实就是因为懒哈&#xff09;的原因&#xff0c;已经很长时间没更新博客了&#xff0c;现在也调整的差不多了&#xff0c;准备还是以每周1-2篇的进度来更新博客&#xff0c;并完成本项目所有功能。言归正传&#xff…

树上子链(树形dp求树的直径)

树上子链 题意&#xff1a; 给定一棵树 T &#xff0c;树 T 上每个点都有一个权值。 定义一颗树的子链的大小为&#xff1a;这个子链上所有结点的权值和 。 请在树 T 中找出一条最大的子链并输出。 题解&#xff1a; 求树的直径&#xff0c;题目中存在负权值&#xff0c;树…

【无码专区1】简单路径的第二大边权(启发式合并+最小生成树)

只有std&#xff0c;没有自我实现&#xff0c;所以叫做无码专区 description 给一张无向图&#xff0c;多次询问&#xff0c;每次询问两个点之间所有简单路径&#xff08;不重复经过点&#xff09;中边权第二大&#xff08;不是严格第二大&#xff09;的权值的最小值。 数据…

# CF1572B Xor of 3(构造)

解析 你CF还是你CF 省选刷到2017再往前不是很想做了&#xff0c;就来CF玩一玩。 再次感受到被CF浅颜色构造虐的快感。 本题靠着各种乱搞特判在WA了无数次之后艹过去了。 根本没有什么正确性的玄学做法&#xff0c;但是看CF数据似乎把 nnn 较小的所有情况全都pia到数据里了&…

NET Core微服务之路:简单谈谈对ELK,Splunk,Exceptionless统一日志收集中心的心得体会...

前言日志&#xff0c;一直以来都是开发人员和运维人员最关心的问题。开发人员可通过日志记录来协助问题定位&#xff0c;运维人员可通过日志发现系统隐患&#xff0c;故障等定位问题。如果你的系统中没有日志&#xff0c;就像一个断了线的风筝&#xff0c;你永远不知道它会的落…

【无码专区2】序列划分(数学)

有std&#xff0c;但是没有自我实现&#xff0c;所以是无码专区 description 完全由数字组成的字符串 sss&#xff0c;划分成若干段&#xff0c;每一段看成一个十进制的数&#xff08;允许前导零&#xff09;求有多少种划分方法使得相邻两个数至少一个是 DDD 的倍数。对 1097…

Rinne Loves Edges

Rinne Loves Edges 题意&#xff1a; 有n给点&#xff0c;m个边&#xff0c;每个边有边权&#xff0c;给你一个点S&#xff0c;问最少花多少代价&#xff0c;可以让叶子节点无法与S点连通 题解&#xff1a; dp[u]:表示u到叶子节点的最短费用的和 dp[u]min(dp[v],w); 代码&…

.NET Core 中的 Generic Host快速使用指南

本文以自己在工作中学习和使用.net core generic-host 作一个总结。前言在创建的ASPNETCORE项目中&#xff0c;我们可以在Main()中看见&#xff0c;我们通过IWebHostBuild创建了一个IWebHost&#xff0c;而微软提供了WebHost.CreateDefaultBuilder(args)来帮助我们更轻松得创建…

CF1580B Mathematics Curriculum(笛卡尔树、树形dp)

解析 比较巧妙的一道题。 难点在于对题意的转化。 关键性质&#xff1a;符合要求的点等价于与笛卡尔树上深度为 mmm 的点。 原因也较为显然&#xff0c;考虑一个特定的点 xxx&#xff0c;当枚举全局最大值时&#xff0c;其会对 xxx 产生贡献&#xff0c;且最大值另一侧就和 xx…

CF1368G Shifting Dominoes(扫描线求矩阵的并集)

CF1368G Shifting Dominoesproblemsolutioncodeproblem 题目链接 solution 求的是最后棋盘本质不同的个数&#xff0c;而本质不同等价于两个空格位置不同。 如果想要移动一个多米诺骨牌&#xff0c;要求长边上下方有空位。 移动可以看成空位的移动。 所以我们考虑把一个 …

吉吉王国(二分+树形dp)

吉吉王国 题意&#xff1a; n个点&#xff0c;m个边&#xff0c;有边权&#xff0c;现在要求叶子节点无法与1号点连通&#xff0c;要求切断的总长度不能超过m&#xff0c;且切断的最长的长度尽可能断 题解&#xff1a; 题意的前半部分可以确定是树形dp&#xff0c;后半部分…

P3239 [HNOI2015]亚瑟王(期望)

解析 显然可以利用期望的线性性对每张牌单独计算贡献。 现在的关键就是如何求出每张牌被使用的概率。 考虑第 iii 张牌&#xff0c;如果它的前面 [1,i−1][1,i-1][1,i−1] 中有 jjj 张牌被使用&#xff0c;那么它被使用的概率就是 1−(1−pi)r−j1-(1-p_i)^{r-j}1−(1−pi​)…

微软一顿操作猛如虎,PowerShell 排名直线上升

近日&#xff0c;TIOBE 发布了 2019 年 3 月编程语言排行榜&#xff0c;PowerShell 首次进入到了榜单的 Top 50 中&#xff0c;排在第 45 位。PowerShell 是运行在 Windows 操作系统上实现对系统以及应用程序进行管理自动化的命令行脚本环境。&#xff08;PowerShell 排在了 TI…

CF1237F Balanced Domino Placements(dp+组合计数)

CF1237F Balanced Domino Placementsproblemsolutioncodeproblem 题目链接 solution 骨牌横着放会占用一行两列&#xff0c;骨牌竖着放会占用两行一列。 问题可以抽象为&#xff1a;每次可以选择连续的两行放 AAA&#xff0c;或选一行放 BBB&#xff1b;每次可以选一列放 B…

AcWing 201. 可见的点

AcWing 201. 可见的点 题意&#xff1a; 题解&#xff1a; 我们先说结论:坐标(i,j)&#xff0c;如果i和j互质&#xff0c;说明该坐标为可见 为什么&#xff1f; 我们想想什么样的坐标可见&#xff0c;什么样的会被挡住。光线是一个直线&#xff0c;在同一个直线上的点会被第一…

模板:LGV引理(线性代数)

所谓LGV引理&#xff0c;就是解决LGV问题的引理。 &#xff08;逃&#xff09; 前言 上联&#xff1a;古有学完SAM学PAM&#xff1b; 下联&#xff1a;今有学完Polya学LGV&#xff1b; 横批&#xff1a;小清新。 常被用于有向图不交路径计数问题。&#xff08;废话&#xff…

ocelot 自定义认证和授权

Intro最近又重新启动了网关项目&#xff0c;服务越来越多&#xff0c;每个服务都有一个地址&#xff0c;这无论是对于前端还是后端开发调试都是比较麻烦的&#xff0c;前端需要定义很多 baseUrl&#xff0c;而后端需要没有代码调试的时候需要对每个服务的地址都收藏着或者记在哪…

CF765F Souvenirs(势能线段树)

CF765F Souvenirsproblemsolutioncodeproblem 题目链接 solution 这个势能线段树简直是太巧妙了&#xff01;&#xff01;&#xff01;( ఠൠఠ )&#xff89; 将询问按右端点升序离线下来。 对于每一个右端点 rrr&#xff0c;维护 ansimin⁡{∣ai−aj∣,j∈[i,r]}ans_i\m…