水题练习 1

作题笔记 1

hzwer 数据结构杂题选讲(14/16)

偷了一个题表来作,当作康复训练了23333ios

代码在这里git

【2018.7.3】github

  1. CF140C 贪心、排序
  2. CF519B 离散化 / 排序
  3. CF650A 排序 (注意比较函数写法很差会致使sort死掉)
  4. CF466C 裸一维偏序
  5. CHSEQ22 差分、并查集 相似线性空间
  6. CF460C 二分答案、贪心

【2018.7.4】数组

  1. CF212D.Cutting a Fence数据结构

    单调栈处理\(a_i\)做为最小值的范围延伸长度记为\(l_i,r_i\)函数

    发现性质,对每一个\(a_i\)讨论对长度k区间的最小值和的贡献spa

    贡献是\(a_i * \min(l_i+1,\ r_i+1,\ k,\ l_i+r_i+2-k)\)code

    而后发现有区间加常数和区间加等差数列两种操做,二次差分排序

    PS:1.注意讨论get

    ​ 2.iostream真是慢,要std::ios::sync_with_stdio(false)才行

  2. CF459D

    裸二维偏序,预处理 + 树状数组,用后缀和bit也能够

  3. CF528A.Class Carving

    答案就是最大长*最大宽

    变成一维问题,加入点、求当前相邻点最大差值

    平衡树处理线段问题,插入、找前驱后继,能够用set

    再用个map或者multiset来作删除、插入、求最大值,map居然更快2333

    set/map小笔记:内部是平衡树,用<定义的; 迭代器能够++ —, insert返回pair(迭代器,bool),multi的话返回迭代器.

  4. CF633C.Spy Syndrome 2

    classical的dp,\(f_i\)表示拼出s[1,i]上一步用了哪一个单词,枚举单词长度来转移,复杂度O(n*1000)

    而后个人哈希一直冲突冲突冲突........因而写了trie

    单词建trie,对主串每一位都跑1000长度

【2018.7.5】

  1. CF339D

    线段树,单点修改,查询根 2333

  2. CF527D

    classical 区间覆盖不重叠贪心

  3. P3043 [USACO12JAN]Bovine Alliance

    树的贡献是n,一个环的贡献是2,有其余的就无解

    并查集维护

  4. CF718D. Andrew and Chemistry

    树的同构 自底向上哈希,对每一个点,孩子节点哈希值排序再哈希起来构成本身的哈希值

    对于本题,若u、v加一个新点后同构,则u、v彻底等价,u、v分别为根时哈希值相等

    加上记忆化后复杂度分析:由于度数<=4,因此对于一个点不一样的哈希值最多4种

    由于哈希冲突留下了内心阴影,因而学了hzwer的一个技巧,直接给vector分配哈希值(也是利用了度数小)

相关文章
相关标签/搜索