[题解][YZOJ50104] 密码 | 简单计数
同步发表于 Mina!
题目大意
对于满足以下要求的长度为 \(n\) 的序列进行计数:
序列的值域为 \([1,k]\);
对于序列的任意位置 \(p\in[1,n]\),可以找到至少一个 \(i\) 满足 \(p\in[i,i+k-1]\),且区间 \([i,i+k-1]\) 为一个 \(1\sim k\) 的排列。
\(n\le10^5,k\le100\)
解题思路
其实原本题意不是这样的,试图描述正式之后好像更难懂了。
密码是一个长度为 \(n\) 的序列。
密码由若干个 \(1\sim k\) 的排列拼接而成,且拼接时,不同排列可重叠。
于是不妨设 \(f_i\) 为最后一个完整排列的结尾是 \(i\) 的方案数。于是可以列出转移式:
\]
\(g_j\) 即在一个 \(1\sim k\) 的排列后接上 \(j\) 个数,使得满足以下两个条件的方案数:
\([j+1,j+k]\) 是一个 \(1\sim k\) 的排列,
对于任意 \(1<i<=j,[i,i+k-1]\) 不是一个 \(1\sim k\) 的排列。
直接拿 \(1,2,3\cdots k\) 来考虑 \(g_j\) 怎么求,那么即要求一个 \(1\sim j\) 的排列,对于任意 \(i<j\),这个排列 \([1,i]\) 的前缀位置上不能是一个 \(1\sim i\) 的排列,求满足条件的排列个数。
考虑容斥,首先令 \(g_j=j!\),然后考虑减去不合法的,对于一个不合法的排列,它可能存在若干个前缀符合 \([1,i]\) 是一个 \(1\sim i\) 的排列,那么我们枚举每一个不合法排列最后一个违反限制的前缀,在这个位置将其减去。
假设当前枚举到 \(i\),首先 \([1,i]\) 这部分肯定是 \(i!\) 种填法,而 \([i+1,j]\) 这部分,由于我们钦定 \(i\) 是最后一个违反限制的前缀,故 \([1,i]\)与 \([i+1,j]\) 相接不可再违反限制,即对于任意 \(i<p<j,[i+1,p]\) 这一段上不能是将 \(i+1\sim p\) 这些数任意排列的结果,于是就变成子问题了,乘上 \(g_{j-i}\) 就好了。
所以就是两个简单的式子:
f_i=\sum_{j=1}^{k}f_{i-j}\times g_{j}
\]
\(f_n\) 就是答案了,然后这个题大概还可以搞什么矩阵快速幂或者线性递推,前者感觉没必要,后者我不了解,于是就到此为止了 QwQ。
[题解][YZOJ50104] 密码 | 简单计数的更多相关文章
- 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]
[题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...
- Luogu 1603 - 斯诺登的密码 - [简单字符串操作]
题目链接:https://www.luogu.org/problemnew/show/P1603 题目背景 根据斯诺登事件出的一道水题 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混 ...
- 【题解】P2602 数字计数 - 数位dp
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...
- 题解 有标号DAG计数
题目传送门 题目大意 给出\(n\),求出对于任意\(t\in[1,n]\),点数为\(t\)的弱联通\(\texttt{DAG}\)个数.答案对\(998244353\)取模. \(n\le 10^ ...
- (转 部分修改) IOS 手势密码(简单版)
// // Created by wangtouwang on 15/4/7. // Copyright (c) 2015年 wangtouwang. All rights reserved. // ...
- 【XSY3156】简单计数II 容斥 DP
题目大意 定义一个序列的权值为:把所有相邻的相同的数合并为一个集合后,所有集合的大小的乘积. 特别的,第一个数和最后一个数是相邻的. 现在你有 \(n\) 种数,第 \(i\) 种有 \(c_i\) ...
- \(\rm LightOJ 1371 - Energetic Pandas 简单计数+组合\)
http://www.lightoj.com/volume_showproblem.php?problem=1371 题意:给你n根竹子,和n只熊猫(XD),每个熊猫只能选择重量不大于它的竹子,问有几 ...
- [题解](树的计数)luogu_P4430猴子打架_/_luogu_P4981父子
来源:题解 比较不错的博客:http://www.cnblogs.com/dirge/p/5503289.html 最后生成一颗无根树,有n^(n-2)种情况,打架的顺序有(n-1)!种 #inclu ...
- Centos6.5 6.6 (均可) 重置密码或强行破解root密码 简单操作
centos忘记root密码怎么重置root密码? 使用Linux系统的时候root密码是十分关键的安全机制. 但是假设那天丢失了root密码的话问题就严重了. 百牛信息技术bainiu.ltd整理发 ...
随机推荐
- Spring由哪些模块组成?
以下是Spring 框架的基本模块: Core module Bean module Context module Expression Language module JDBC module ORM ...
- 为什么 wait 和 notify 方法要在同步块中调用?
Java API 强制要求这样做,如果你不这么做,你的代码会抛出 IllegalMonitorStateException 异常.还有一个原因是为了避免 wait 和 notify 之间产生竞态条件.
- Maria DB数据库基础知识
Maria DB连接 与MariaDB建立连接的一种方法是在命令提示符下使用mysql二进制文件. Maria DB命令行登录数据库服务: mysql -u root -p -- 换行输入密码 上面给 ...
- 面试问题之计算机网络:TCP滑动窗口
滑动窗口协议是传输层进行流量控制的一种措施,接收方通过通知发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的,并且滑动窗口分为接收窗口和发送窗口.TC ...
- Zookeeper 的典型应用场景 ?
Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员 可以使用它来进行分布式数据的发布和订阅. 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watch ...
- Spring 应用程序有哪些不同组件?
Spring 应用一般有以下组件:接口 - 定义功能.Bean 类 - 它包含属性,setter 和 getter 方法,函数等.Spring 面向切面编程(AOP) - 提供面向切面编程的功能.Be ...
- 解决联想笔记本 安装VM虚拟机后每次启动都会导致电脑蓝屏问题
现象描述: pc为联想笔记本 系统是微软家庭中文版,每次启动VM虚拟机都会出现蓝屏现象,出现错误代码system_service_exception 原因及解决方法: 对于Windows10家庭版 ...
- MATLAB设计模糊控制器并用simulink仿真
一.设计模糊控制器1.1 创建项目文件夹在此路径如图 1.2 打开MATLAB打开MATLAB R2012a切换当前目录为上一步路径,如图 1.3 设计模糊控制器打开模糊控制器设计对话框 根据模糊控制 ...
- 判断链表是否有环(Java实现)
判断给定的链表中是否有环.如果有环则返回true,否则返回false. 解题思路:设置两个指针,slow和fast,fast每次走两步,slow每次走一步,如果有环的话fast一定会追上slow,判断 ...
- 《头号玩家》AI电影调研报告(五)
4.VR自由行走跑步机 电影中,它可以让玩家朝任意方向无限奔跑并保持在平台最中央,还可以模拟上台阶和走斜坡的情况.而下面这件VR跑步装备,可以让你在游戏世界穿行自如. 奥地利创意公司Cyberith公 ...