T1:有n组信息,每组包含一个身高以及一个记录值b,表示此人前或后有b个人高于他,保证身高互不相同。考虑排序后贪心,因为前面的对后面的没有任何影响,所以正确性易证。每次考虑前后的空位置,两次二分,结果取min,由于二分无法保证答案可用,要维护第i个位置开始第一个空位置,用并查集实现。时间复杂度O(nlog2n),用线段树分治可用达到nlogn。(为什么noip模拟赛t1都这么神)
T2:求出l-r内质数以及可用由两个质数相乘得到的数的个数,询问次数1e5,范围1e7。筛出1e7以内的质数,枚举质数以及小于等于它本身且乘积不超过值域的质数,前缀和。由于唯一分解定理,该算法正确且复杂度为O(n)(用nloglogn的埃氏筛也是一样的,埃氏筛的记录数组可以用bitset且数组单一,大大优化访问速度,乘法次数也少于欧拉筛。只要不用求欧拉函数,有o2的情况下埃氏筛优于欧拉筛)
T3:求一个字符串中长度为m的不同的子串数量。emm,这题就是后缀数组的height中 < L的个数 + 1,就是后缀自动机上代表的长度区间包含L的结点个数,就是后缀树深度为L的结点的数量。说的好,我选择字符串hash。第一,不要用自然溢出,可以通过构造保证自然溢出只能通过2048以下的数据。第二,单hash至少1e12起步,模数1e12,串长1e5的正确概率只有99.6%(酋长,咱们回去吧)。那么这题只有双hash加set判断就行了。
10.12noip模拟赛
最新推荐文章于 2021-09-15 07:19:45 发布