2022.7.27 闲话

吐槽

为啥我那个 Crosspain 题总被神秘乱搞日过去 .

为啥要骂造数据的,你行你造一个啊,我感觉造一个答案非 0 的都挺难 .

(见 Chapter 5)


这篇闲话下面的内容可能有点水了 qwq

《五年败北三年模拟》

Chapter 1 —— 分治的败北

平面最近点对。

先对 x 坐标排序,然后一个一个添加点,我们设置一个阈值 d 表示目前找到的最优解 .

开一个以 y 为关键字的 std :: set,每次加入的时候,可以把与当前点横坐标差值超过 d 的先扔掉,然后暴力查询纵坐标差不超过 d 的点更新 d .

暴力最多查询 6 次,所以复杂度在于 std :: set,于是 O(nlogn),同分治法 .

而且还好写……

Chapter 2 —— Hash 的败北

考虑一个问题:

子串 Hash

给一个字符串 S,多组询问两个子串是否相等 .

众所周知 Hash 不是确定性算法我们很生气!!!并且题目名字一定和做法没有关系所以我们不 Hash .

但是直接做貌似很困难??

我们引入高科技!使用 Border Theory 中的 IPM(2|u||v| 的条件不难解决)即可单次 O(log|S|) 解决 .

Hash 能干的最有用的事被干了。

Chapter 3 —— exCRT 的败北

考虑合并两个同余方程组:

{xa1(modn1)xa2(modn2)

首先答案肯定是 modlcm(n1,n2) 意义下的,问题就是要找 xmodlcm(n1,n2) 是多少 .

我们考虑直接暴力,枚举所有满足第一个同余方程的 x,然后一个一个判断是否满足第二个,这样就找到答案了 .

关于论这个为什么不会被卡的见这里:中国剩余定理小记

Chapter 4 —— 高精快速幂的败北

以一道普及组题引入(accoders):

数的幂次

给两个整数 NP1N1091P20000 .

Python 是过不去的 = =

据 xrlong & GOD_hj 所说高精快速幂也过不去 .

我想普及组题怎么这么 NB 呢?

首先把 N,P 按权展开就得到两个多项式 f(10),g(10) .

于是 NP=f(10)g(10)=(fg)(10)=(exp(glnf))(10),直接算 ln/exp 即可 .

如果不满意还可以压位(10 改成 10B).

但是我们忽略了一个问题,只有 N 末位是 1 时才能取 ln!

这个不难解决,先去掉末位的 0,然后除一下最后乘回去就好了 .

选一个可爱的 NTT 模数大概就行了 .

但是我觉得 O(n2) 暴力也没啥事 .

Chapter 5 —— AC 自动机的败北 & Hash 的反击

让我们看一道题:

Crosspain

S0=,要求支持以下操作:

  • 1 hoc s,令 Si=Shoc{s},其中 s 是字符串(保证操作前 sShoc) .
  • 2 hoc s,令 Si=Shoc,并查询 Si 中的所有字符串在给出的字符串 s 中出现的次数之和 .

std :: set 记录一下每次询问后的字符串集,对于每个字符串只需记录其长度与 Hash 值 .

对于操作 1,直接计算字符串 s 的 Hash 值丢 set 里就好了 .

对于操作 2,则直接遍历容器中的元素,并枚举 s 的起始位置,用字符串 Hash 的前缀和快速算出这一个子串的 Hash 值 . 若相等,则答案加一 .

用 set 的同时记录一下这种串的个数即可冲过去,O(q2) 啊!n2 过 50w 什么操作???

posted @   yspm  阅读(125)  评论(5编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示