首页 > 其他分享 >trick 集合

trick 集合

时间:2024-01-19 22:00:52浏览次数:32  
标签:bar 题解 sum trick 括号 集合 Hash

trick 集合

1. 基础

  • 判断是否 \(\forall i\) 有 \(x < a_i\):

  • 括号序列:

    • 是括号序列的条件:

      • 总共的左括号和右括号数量相等;
      • 任意前缀的左括号数量 \(\ge\) 右括号数量。
    • 若将序列中左括号看作 \(1\),右括号看作 \(-1\),则两个条件变成了:

      • 总和为 \(0\);
      • 任意前缀和 \(\ge 0\)。
    • ABC223F & 题解

  • 求有多少区间和为 \(0\):

    • 令 \(s_i = \sum_{j = 1}^i a_j\),那么区间 \([l, r]\) 和为 \(0\) 即 \(s_r - s_{l - 1} = 0\),也即 \(s_r = s_{l - 1}\)。找满足这样的数对即可。
  • 有多少区间和是 \(k\) 的倍数:

    • 令 \(s_i = \sum_{j = 1}^i a_j\),那么区间 \([l, r]\) 为 \(k\) 的倍数即 \((s_r - s_{l - 1}) \bmod k = 0\),也即 \(s_r \equiv s_{l - 1} \pmod k\)。再令 \(t_i = s_i \bmod k\),然后找有多少 \(t\) 相同的数对即可。

    • AT_abc105_d

  • 给定 \(\{a\}, \{b\}\),求有多少区间 \([l, r]\) 满足 \(\sum_{i = l}^r a_i = \sum_{i = l}^r b_i\)。

    • 令 \(c_i = a_i - b_i\),条件变成了 \(\sum_{i = l}^r c_i = 0\)。然后就是上一个的问题。

    • P10033

  • 判断一个字符串中是否存在回文子串:

    • 如果存在 \(s_i = s_{i + 1}\) 或 \(s_i = s_{i + 2}\) 即存在回文子串。否则没有。
    • P3413

2. DP

3. 图论

4. 数据结构

5. 数学

  • 杨辉三角:

  • \(\gcd\),当一个数 \(a_x\) 是所有 \(a_i(a_x \in \{a_i\})\) 的约数时:

  • 方差:

    • \(\dfrac 1n \sum_{i = 1}^n(x_i - \bar x)^2 = \dfrac 1n( \sum_{i = 1}^n x_i^2) - \bar x^2\)。

    • AT_abc332_e & 题解

  • 预处理 \(i^k\):

  • \(x_1, x_2, \dots, x_k\) 的平均值为 \(\bar x\),与 \(k\) 无关的转化:

\[\bar x = \dfrac {\sum_{i = 1}^k x_i}{k}\\ \sum_{i = 1}^k x_k = k\bar x\\ \sum_{i = 1}^k (x_k - \bar x) = 0 \]

6. 其它算法

  • 字符串 Hash:

    • \(\text{Hash of S} = \sum_{i = 1}^{n}S_i \times c^{n-i}\);

    • \(\text{Hash of S}_{l \sim r} = hs_r - hs_{l - 1} \times c^{r - l + 1}\);

    • 线段树上字符串 Hash:ABC331F & 代码

  • 启发式合并:

    • 将小集合合并到大集合中,如有需要可以直接交换。
    • ABC329F & 题解

标签:bar,题解,sum,trick,括号,集合,Hash
From: https://www.cnblogs.com/2huk/p/17975718

相关文章

  • Rust 常见集合
    目录使用Vector储存列表新建vectorVec::new函数(无初值)vec!宏(有初值)更新vector读取vector的元素注意可变和不可变引用遍历vector中的元素使用枚举来储存多种类型丢弃vector时也会丢弃其所有元素使用字符串储存UTF-8编码的文本什么是字符串?新建字符串更新字符串使......
  • EasyExcel读取指定列数据返回集合
    有些时候我们只需要获取Excel中的某一列数据使用,我们就可以将这一列数据读取到集合中以便于后续操作。1、引入依赖<!--easyexcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><......
  • Java Collections.frequency()方法返回集合中指定元素个数
    JavaCollections.frequency()方法具有什么功能呢?下文笔者讲述Collections.frequency()方法的功能简介说明,如下所示:Collections.frequency()方法的功能:返回一个int值,其值给指定对象在集合中出现的次数Collections.frequency()方法的语法publicstaticintfreque......
  • 性能篇:List集合遍历元素用哪种方式更快?
    嗨大家好,我是小米!今天给大家分享一篇关于Java集合框架性能的文章,话题是:“如果让你使用for循环以及迭代循环遍历一个ArrayList,你会使用哪种方式呢?原因是什么?LinkedList呢?”废话不多说,让我们直入主题!ArrayList的get元素源码介绍ArrayList,作为Java集合框架中的一个重要类,是基于数组......
  • Python列表差异值统计:集合操作、列表推导式、对称差集详解
     在Python中,统计两个列表的差异值有多种方法,其中包括使用集合操作、列表推导式等。下面我将通过实例详细讲解几种常见的方法,并提供相应的实例源代码。方法一:使用集合操作list1=[1,2,3,4,5]list2=[3,4,5,6,7]#找到在list1中而不在list2中的元素difference1......
  • 【Java 进阶篇】使用 Stream 流和 Lambda 组装复杂父子树形结构(List 集合形式)
    目录前言一、以部门结构为例1.1实体1.2返回VO1.3具体实现1.4效果展示二、以省市县结构为例2.1实体2.2返回VO2.3具体实现2.4效果展示三、文章小结前言在最近的开发中,一星期内遇到了两个类似的需求:返回组装好的部门树、返回组装好的地区信息树,最终都需要返回List集合对象给前端......
  • 无涯教程-LISP - 集合(Set)
    adjoin函数首先在给定列表中查找该元素(如果找到),然后返回原始列表,否则,它将创建一个新的cons单元格,其car作为元素,而cdr指向原始列表,并返回此新列表。adjoin函数还使用:key和:test关键字参数。adjoin函数不会修改原始列表,因此要更改列表本身,您必须将adjoin返回的值分......
  • 将Map集合中的数据导入到Excel中
    需求:输入两个Map集合,分别将两个Map集合中的key和value对应显示在excel的对应的页面上代码:<!--ApachePOI依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.4&l......
  • laravel 集合&数组
    #列表集合&数组$_list_collection=collect([['name'=>'John','age'=>25],['name'=>'Jane','age'=>30]]);$_list_array=[['name'=>'John','age......
  • 【Python基础】set(集合)
    简介集合跟我们学的列表有点像,也是可以存放一堆数据,不过集合有几个独特的特点,令其在整个Python语言中占有一席之地。相当于只有键没有值的字典(键则是集合的数据)。基本操作特点*里面的元素不可变,代表不能存储一个list、dict、在集合中,字符串、数字、元组等不可变类型可以存......