人世几回伤往事,山形依旧枕寒流。
2021.08.17
A.魔力
魔力
设 cnti 为字符 i 出现的次数,那么题目求的就是所有 cnti 均相等的区间个数
因为 cnti 不固定,所以做个差分可以发现当且仅当差分为 0 的时候合法
那么从 1 开始拓展记录 cnt 差分,如果出现了两个地方的 cnt 差分数组相同,那么这两个 cnt 差分数组相减就是全 0
记录一个 vector 的 map 即可
code
B.粒子
粒子
就是一大堆一次函数求第一次交点
二分时间即可
code
C.六
六
状压
发现只压某个质因子出现的次数是不行的
因为 (2,3) (6) 质因子出现次数相同,但是可以转移的状态不同
还需要记录一个每一对质因子能否同时出现在一个数里的状态
这里只需要二进制 2cnt(cnt−1) 位,质因子是三进制状压
记录一个 pair 去转移即可
考的时候没想到再去记录一个二进制位
code
D.多重集合问题
多重集合问题
经典题目,整体二分
code
2021.08.18
A.引子
引子
大模拟,注意数字可以是多位数
code
B.可爱精灵宝贝
可爱精灵宝贝
记录 dpl,r,t,0/1 表示拿完 [l,r] 的物品后时间为 t 且在 左/右 端点上的最大价值
分类讨论转移
code
C.相互再归的鹅妈妈
相互再归的鹅妈妈
钦定有些人能选同一个然后斯特林反演
不会写
D.盟誓的文艺复兴
盟誓的文艺复兴
首先注意到只有 c=2,3 是有意义的,别的都可以拆成 c=2.3 的情况
c=2 的情况就是
i=1∑3nμ2(i)(in−i)
即枚举无完全平方因子的数,然后乘上能选的数字 (a<b)
c=3 比较复杂
先把 c=2 统计过的排除掉
设 k 是满足 k2∣ab 最大数字
那么 ab3=(k2ab)(bk)2
考虑如果之前没被统计过需要满足 k2ab>bk⇒a≥k3
定义 μ3(x):=[∃d3∣x,d=1]
即没有完全三次方因子
式子是
a=1∑4nμ3(i)k3≤a∑b=a+1∑3an[k2∣ab]μ2(k2ab)
然后设 g=gcd(a,k2),a′=ga,k′=gk2,b′=k′b (神奇代换,不懂原理)
a=1∑4nμ3(i)k3≤a∑b′=k′a+1∑k′3anμ2(a′b′)
μ(ab)=μ(a)μ(b)[gcd(a,b)=1]
所以
a=1∑4nμ3(i)k3≤a∑μ2(a′)b′=k′a+1∑k′3anμ2(b′)[gcd(a′,b′)=1]
反演掉 [gcd(a,b)=1]
a=1∑4nμ3(i)k3≤a∑μ2(a′)d∣a′∑μ(d)b′=k′a+1∑k′3an[d∣b′]μ2(b′)
枚举的其实都挺小的,可以大力预处理
code
2021.08.19
A.没有硝烟的战争
没有硝烟的战争
类似 SG 的方法,记录 dpi,j 表示第 i 个动物报了 j 能不能赢
如果它的下一个是同种族并且 [j+1,j+k] 中有一个必胜他就必胜
否则必败,下一个是不同种族且 [j+1,j+k] 中有一个必胜他就必败,否则必胜
大力转移 O((n+m)m)
code
B.秘密通道
秘密通道
能连的边全连上跑最短路
具体来说是把一个位置上下左右的四个墙按到最近的墙的距离连上
code
C.城市猎人
城市猎人
每天会把 m−i+1 的倍数的城市全都连起来,类似克鲁斯卡尔重构树,记录连接的过成为一个树,找 LCA 即可
code
D.无限远点的牵牛星
题解
2021.08.20
A.路径计数
路径计数
四点四边的无向图欧拉回路技术
不太可做
考虑给无向边定向,实际上定了一个向因为要有欧拉回路所以剩下的也都出来了
枚举第一条边多少个边定正向,跑 BEST 定理
code
B.BRT
BRT
记忆化可以水过去
没有梦想,没敢写
code
C.xor
xor
见 Friends
code
D.核糖
核糖
同 [旅行规划]
就是区间加等差数列,区间查最大值
分块,块内维护凸包即可
(然而暴力可过
核糖
2021.08.21
A.赛
赛
wqs二分
贪心的考虑先选两个人都喜欢的,然后选各自喜欢的,最后选不喜欢的补齐
需要查询前 k 小,可以用可删堆做,或者干脆排完序拿指针模拟
挺难写的
code
B.Merchant
Merchant
一堆一次函数,求前 m 大总和超过 S 的最小时间
虽然前 m 大不随时间单调,但是一定呈现一个先降后升或上升的形式,所以特判 0 是否有解即可
code
C.Equation
Equation
手动处理下,每个点都能表示成 x1±w 的形式,可以 dfs 一遍预处理符号
修改操作是是一个子树的修改,查询只要知道 w 和符号就能解方程
没开 long long 挂大分
code
D.Rectangle
Rectangle
暂咕
code
2021.08.23
A.xor
xor
先前缀异或一下转化成区间内两个点最大异或值
考虑大力分块,prei,j 表示块 i ,第 j 位前缀最大两点异或值
用可持久化 Trie 找即可
O((n+q)nlogw)
code
B.magic
magic
字符集巨大的 AC 自动机
考虑 AC 自动机建立 fail 指针的过程,是要继承自 fail 的转移边,如果字符集很大暴力扫是不可取的,但是继承这个操作可以想到可持久化数据结构,用主席树就可以很好的维护树上的继承关系
主席树太不熟练了,写挂了调到考完
code
C.strGame
strGame
类似SG,但是多局之间有影响,考虑多分些状态表示必胜,必败,能控制必胜必败和被控制
Trie 上 dfs 求出状态
如果是必胜那么只能赢奇数轮,能控制必胜必败就一定能赢
否则必败
code
D.神秘数问题
被粉碎的数字