水题练习 1

做题笔记 1

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

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

代码在这里

【2018.7.3】

  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区间的最小值和的贡献

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

    然后发现有区间加常数和区间加等差数列两种操作,二次差分

    PS:1.注意讨论

    ​ 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分配哈希值(也是利用了度数小)

posted @ 2018-07-05 17:28 Candy? 阅读(...) 评论(...) 编辑 收藏