标签:满足条件 le 技巧 插入 一个 求有 计数 满足 序列
其实是一个比较常用的数数技巧,但是遇到题目的时候总是忘掉。
就是形如已知一个序列,求有多少个排列满足一个条件,这个条件一般是制约相邻两个元素的。
那么可以采用一个技巧就是序列排序,然后按照某种顺序插入。
ABC267G *2561 \(\color{blue}\bigstar\)
有一个长度为 \(n\) 的序列 \(a\),求有多少种排列方式满足恰好 \(k\) 个 \(1\le i<n\),满足 \(a_i<a_{i+1}\)。
\(n\le 5000\)。
考虑有多少排列问题,那么可以先对 \(a\) 排序然后依次插入。
每次插入一个最大值,那么只需要求有多少个位置满足插入后满足条件的位置 \(+1\),然后直接跑一遍简单的背包即可。
ARC148E *2785 \(\color{Gold}\bigstar\)
有一个长度为 \(n\) 的序列,求有多少个不同的排列满足所有 \(1\le i<n\) 满足 \(a_i+a_{i+1}\ge k\)。
\(n\le 2\times 10^5\)。
考虑先排序,如果从小到大,会发现很难搞,因为满足条件位置数量一直在变化。
考虑从小到大加入一个数前,先把与他满足条件的点都加入,那么可以发现可以插入的位置数就是固定的了。
具体而言,维护区间 \([l,r]\),不断向中间移动,那么可以发现如果 \(l,r\) 满足就把 \(r\) 放入,否则放入 \(l\),考虑这样对于 \([r+1,n]\),这些数的旁边都可以放,而对于 \([1,l-1]\) 就都不行,因此可以直接算了。
标签:满足条件,le,技巧,插入,一个,求有,计数,满足,序列 来源: https://www.cnblogs.com/houzhiyuan/p/16687335.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。