首页 > 其他分享 >组合杂题选讲 #1

组合杂题选讲 #1

时间:2022-12-08 17:25:38浏览次数:42  
标签:right 组合 leq 选讲 合法 区间 端点 序列 杂题

问题描述

题意:一个长度为 \(n\) 的由 \(-1\) 或 \(1\) 构成的序列 \(a\),其中 \(1\) 的个数为 \(c\) 个。我们称一个子区间合法是指该子区间的数的和大于等于 \(0\)。求证:所有合法子区间的左端点的数量不超过 \(2c\) 个。

提示:子区间是指序列中连续的一段,形式化地说,问题是求证

\[\left|\left\{l:\exists_{r\geq l}\left(\sum_{i=l}^ra_i\right)\geq0\right\}\right|\leq2c \]

举个例子,若 \(n=8,c=3\),序列 \(a\) 为

\[-1,1,1,-1,-1,1,-1,-1 \]

那么序列 \(a\) 中所有合法子区间的左端点共有 \(5\) 个,为下面括号的位置

\[(-1),(1),(1),-1,(-1),(1),-1,-1 \]

解答

对于某个序列 \(a\),记 \(S(a)\) 表示序列中所有合法子区间的左端点的数量。

如果 \(a\) 存在一个 \(-1\) 在一个 \(1\) 的后面,即存在下标 \(i,j\) 满足 \(i<j\) 且 \(a_i=1,a_j=-1\),那么交换 \(i,j\) 位置上的值后,得到一个新序列 \(a'\),显然 \(a'\) 中 \(1\) 的数量也为 \(c\)。

引理 进行上述变换后所有合法子区间的左端点的数量不降,即 \(S(a)\leq S(a')\) 一定成立。

假设上述引理成立,那么我们就只需要论证由 \(n-c\) 个 \(-1\) 开头,然后 \(c\) 个 \(1\) 组成的序列 \(a_0\) 满足 \(S(a_0)\leq 2c\),这是显然的。而对于任何其他序列,它们都可以通过有限次上述变换得到序列 \(a_0\)。

下面我们证明该引理成立,考虑序列 \(a\) 的前缀和序列 \(p\),

\[p_k=\sum_{i=1}^ka_i \]

那么左开右闭区间 \((l..r]\) 合法等价于 \(p_r-p_l\geq0\)。设我们要交换序列 \(a\) 中的 \(i,j\) 位置,由于 \(a_i=1\),所以 \(p_{i-1}=p_i-1\) 。若某个位置 \(k<i\) 本来某个合法区间的左端点,而交换 \(i,j\) 位置上的值后它就不是了,那么一定有 \(p_k=p_i\)。

那么找出 \(i\) 前面第一个 \(p_k=p_i\) 的位置(如果有)后,\(k\) 以前的左端点都不会改变,因为 \(p_k=p_i\) 说明 \(i,k\) 位置是等价的。这说明 \(S(a)\leq S(a')\)。

2022年12月08日 于东莞松山湖

标签:right,组合,leq,选讲,合法,区间,端点,序列,杂题
From: https://www.cnblogs.com/szdytom/p/combinatorial-misc-1.html

相关文章

  • 使用ADDCOLUMNS 和 SUMMARIZE的组合
    先说结论,建议不要使用SUMMARIZE函数来增加扩展列,而使用ADDCOLUMNS和SUMMARIZE的组合。虽然SUMMARIZE函数被标记为弃用,但是有时使用起来真的非常方便。ADDCOLUMNS(......
  • 力扣-77-组合
    直达链接这个问题应该就是我想找的答案了,把k=1~n全部输出一遍然后如果k=n,那就是全排列问题不对,还是不一样,这里只考虑数字组合,而没考虑数字顺序也就是排列问题两种解法,第......
  • 算法练习:排列组合之子集合
    问题描述输入一个含有不同数字的序列,输出其所有子集合(含空集)。要求:1)集合里元素有序排列;2)输出结果不含有重复集合 举例输入序列{3,1,2}输出:{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} 问......
  • 算法练习:排列组合之全排列
    问题描述输入一个不含相同数字的序列,输出所有可能的排列。 问题分析与之前的“求解子集合”类似,使用递归方法:典型的在for循环内调用递归函数。不同的是,必须等到所有的数字......
  • 算法练习:排列组合之组合和
    问题描述给出一组不同的正整数序列和一个目标值,求出所有可能的组合,使得组合里所有元素和为目标值。要求:1)每个组合里的元素按照升序排列。2)输出组合里不含有重复的组合。3)输......
  • GUI-6-练习代码组合框及按钮-2022-12-7
    packagecom.lr.guifirstdemo;importjava.awt.*;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;publicclasstestDemo05{publicstatic......
  • A组合方案 (n个选m个)
    递归实现组合型枚举从1∼n这n个整数中随机选出m个,输出所有可能的选择方案。输入格式两个整数n,m,在同一行用空格隔开。输出格式按照从小到大的顺序输出所有方......
  • Vim 配置 C/C++使用组合快捷键格式化文件
    安装vim插件管理工具#vim插件管理-插件https://github.com/VundleVim/Vundle.vimgitclonehttps://github.com/VundleVim/Vundle.vim.git~/.vim/bundle/Vundle.vim......
  • 【e3项目学习二】——zk与dubbo的组合运用
    【zk】1.zk简介官方推荐使用zookeeper注册中心。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册......
  • js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合
    现在有一批手机,其中颜色有['白色','黑色','金色','粉红色'];内存大小有['16G','32G','64G','128G'],版本有['移动','联通','电信'],要求写一个算法,实现[['白色','16G','移动'......