zoukankan      html  css  js  c++  java
  • 近两年HBOI选做

    HBOI2019(十二省联考2019)
    6.1:
    D1T1异或粽子

    好写的做法:
    做一个前缀异或,区间就变成了点对。
    先对称,去掉左右端点的限制。把每个数和其他的数的异或最大值带着自己的下标开个结构体丢进大根堆,每次pop最大的,如果我们取出的是s_{i}与s中元素异或的第t大值,就在堆中插入s_{i}与s中元素异或的第t+1大值。
    复杂度(O((n+k)logalogn))

    不依赖k做法:
    考虑一个熟悉的模型,区间和前k大,我们当时是怎么处理的?
    是不是先二分答案,然后对于每一个右端点询问左端点中有多少个的和大于二分的值?
    同样的做就好了,唯一面对的问题是对于“每一个右端点询问左端点中有多少个的异或和大于二分的值”怎么处理。
    其实也不难,因为二分的值个确定值,右端点也是个确定值,高位贪心讨论当前位置两个数字是0还是1,分情况处理一下即可。
    复杂度(O(logk imes n imes loga))

    6.2
    D1T2字符串问题
    先建出SAM,这样我们就有了parent树。
    考虑,一个子串为另一个的后缀当且仅当它在parent树上是另一个子串的祖先。
    所以支配关系完全可以用向自己子树中的所有串连边来表示。
    而树上连边是可以前缀和优化的。
    最后来考虑这是张什么图。如果有环,那么答案显然是inf,所以只需要考虑有向无环图的情况,把b类串的权值赋为0,a类赋为长度,DAG上DP即可。

    D2T1皮配
    https://www.cnblogs.com/PaperCloud/p/11296584.html
    这位大佬我认为已经讲的比较好了,我就不赘述了。
    感觉这题从生成函数的角度还是比较好理解的。

    D2T2是结论题,D2T3只会n方,而且对于我这种辣鸡来说D2T3能会个n方应该就够了,没必要学后面的长剖和可回退化数据结构。

    HBOI2018
    6.5
    D1T1一双木棋
    轮廓线DP,没了。

    D1T2 IIIDX

  • 相关阅读:
    [leetCode]945.使数组唯一的最小增量
    [leetCode]974. 和可被 K 整除的子数组
    [leetCode]1035.不相交的线
    [leetCode]面试题 10.01. 合并排序的数组
    [leetCode]面试题04.二维数组
    [面试题03]数组中的重复数字
    [leetCode]169.多数元素
    [leetCode]160.相交链表
    [leetCode]155.最小栈
    POJ 2127 Greatest Common Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/thedreammaker/p/13023402.html
Copyright © 2011-2022 走看看