同步发表于 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\) 的方案数。于是可以列出转移式:

\[f_i=\sum_{j=1}^{k}f_{i-j}\times g_{j}
\]

\(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}\) 就好了。

所以就是两个简单的式子:

\[g_i=i!-\sum_{j=1}^{i-1}j!\times g_{i-j}\\
f_i=\sum_{j=1}^{k}f_{i-j}\times g_{j}
\]

\(f_n\) 就是答案了,然后这个题大概还可以搞什么矩阵快速幂或者线性递推,前者感觉没必要,后者我不了解,于是就到此为止了 QwQ。

[题解][YZOJ50104] 密码 | 简单计数的更多相关文章

  1. 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]

    [题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...

  2. Luogu 1603 - 斯诺登的密码 - [简单字符串操作]

    题目链接:https://www.luogu.org/problemnew/show/P1603 题目背景 根据斯诺登事件出的一道水题 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混 ...

  3. 【题解】P2602 数字计数 - 数位dp

    P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...

  4. 题解 有标号DAG计数

    题目传送门 题目大意 给出\(n\),求出对于任意\(t\in[1,n]\),点数为\(t\)的弱联通\(\texttt{DAG}\)个数.答案对\(998244353\)取模. \(n\le 10^ ...

  5. (转 部分修改) IOS 手势密码(简单版)

    // // Created by wangtouwang on 15/4/7. // Copyright (c) 2015年 wangtouwang. All rights reserved. // ...

  6. 【XSY3156】简单计数II 容斥 DP

    题目大意 定义一个序列的权值为:把所有相邻的相同的数合并为一个集合后,所有集合的大小的乘积. 特别的,第一个数和最后一个数是相邻的. 现在你有 \(n\) 种数,第 \(i\) 种有 \(c_i\) ...

  7. \(\rm LightOJ 1371 - Energetic Pandas 简单计数+组合\)

    http://www.lightoj.com/volume_showproblem.php?problem=1371 题意:给你n根竹子,和n只熊猫(XD),每个熊猫只能选择重量不大于它的竹子,问有几 ...

  8. [题解](树的计数)luogu_P4430猴子打架_/_luogu_P4981父子

    来源:题解 比较不错的博客:http://www.cnblogs.com/dirge/p/5503289.html 最后生成一颗无根树,有n^(n-2)种情况,打架的顺序有(n-1)!种 #inclu ...

  9. Centos6.5 6.6 (均可) 重置密码或强行破解root密码 简单操作

    centos忘记root密码怎么重置root密码? 使用Linux系统的时候root密码是十分关键的安全机制. 但是假设那天丢失了root密码的话问题就严重了. 百牛信息技术bainiu.ltd整理发 ...

随机推荐

  1. 什么是 Hystrix?它如何实现容错?

    Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性.通常对于使用微服 构开发的系统,涉及到许多微服务 ...

  2. 为什么要使用 kafka,为什么要使用消息队列?

    缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理. 解耦 ...

  3. Memcached 服务特点及工作原理是什么?

    a.完全基于内存缓存的 b.节点之间相互独立 c.C/S 模式架构,C 语言编写,总共 2000 行代码. d.异步I/O 模型,使用 libevent 作为事件通知机制. e.被缓存的数据以 key ...

  4. Spark学习摘记 —— RDD行动操作API归纳

    本文参考 参考<Spark快速大数据分析>动物书中的第三章"RDD编程",前一篇文章已经概述了转化操作相关的API,本文再介绍行动操作API 和转化操作API不同的是, ...

  5. 攻防世界php_rce

    php_rce 进入题目提示为ThinkPHP V5 遇到这种题我们一般去找一下框架的rce漏洞即可,搜索到这样一篇文章 https://www.freebuf.com/articles/web/28 ...

  6. 浅析CSS定位

    position 属性指定了html元素的定位类型. position 属性有 4 种值:1. static(default)表示没有定位,元素出现在正常的文档流中.为静态定位的元素设置 top|bo ...

  7. Android Studio连接SQLite数据库与SQLite Studio实时同步的实现

    最近学习用到了android开发连接数据库这一块,发现连接成功后,都要先访问安卓项目的数据库路径data/data/项目/databases,然后把对应的db文件拷出来,再在SQLite的可视化工具中 ...

  8. CCF201409-2 画图

    问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色. 下图给出了一个画了两个矩形的例子.第一个矩形是 ...

  9. JavaScript 中 empty、remove 和 detach的区别

    内容 empty.remove 和 detach的区别 jQuery 操作 DOM 之删除节点 方法名 元素所绑定的事件及数据是否也被移除 作用 $(selector).empty() 是 从被选元素 ...

  10. 腾讯云服务nginx部署静态项目

    一直想要搭建自己的blog,买了基础云服务器练手 文章内容是根据腾讯文档(https://cloud.tencent.com/document/product/213/2131)总结 部署静态页面归纳 ...