07 2019 档案
摘要:$$max(a, b, c) min(a, b, c) = \frac{|a b| + |b c| + |c a|}{2}$$,两个也适用,n个也适用
阅读全文
摘要:%p等价于1,常考虑欧拉定理以及$\phi(p)$约数中找循环节
阅读全文
摘要:出处 对一个01矩阵进行拓展,比如原矩阵是1: 对称翻倍 10 01 翻倍 1001 0110 0110 1001 翻倍…… 以0为下标,第(a, b)个矩阵是原矩阵还是反转的矩阵想接近O1知道,可以求__builtin_popcount(a)+__builtin_popcount(b),如果是奇数
阅读全文
摘要:$$\frac{1}{ab} = (\frac{1}{a} \frac{1}{b}) (\frac{1}{b a})$$ 根据需求也可以改成加法形式。
阅读全文
摘要:反思 写一写可以发现上限不断更新 一直在想怎么判断NO,刻板拘泥于错误的模型,想要像往常一样贪心地、读入当前值就能判断会不会NO,实际上只要构造完以后,最后把所有操作重新跑一遍看会不会冲突即可判断NO C++ include include include include using namespa
阅读全文
摘要:要点 不难发现问题转化成:n堆石子,每次最多选k堆最少选1堆然后拿走一个石子,谁先没子可拿谁败。本题中撤退不必考虑。 就是记笔记吧,类似nim的博弈,举例:$$k=3,n=4$$$$4堆石子分别是1、2、3、3$$全化为二进制$$01$$$$10$$$$11$$$$11$$然后每一位纵向加和,两位都
阅读全文
摘要:要点 会发现本质上棋盘分成了若干个独立集,本集合内的点放不放棋子并不影响其他集合内的 集合的划分方式就是满棋盘跳马步直到全跳过了,然后每个集合就分成两队,我们选人多的那队放棋子,人少那队当禁区 C++ const int maxn = 1e3 + 5; const int nx[] = { 2, 2
阅读全文
摘要:要点 做法是删去连续的k个0或k个1,连消、消消乐的那种,网上博主用个栈$O(n)$就很优秀地操作了这个过程 原因是有性质:比如k=3,101000贪心地翻就能翻成000101,所以连续的k个可以都挪到后面去 C++ / GYM 101981 E / include include using na
阅读全文
摘要:要点 括号序列平衡度即树深度 的性质 相当于中序遍历,则两点间最浅的地方即是LCA 的性质 线段树维护$d(a) + d(c) 2 d(lca(a,c))$,一层层剥,思考维护这个量需要什么,结果维护一大堆。 C++ include include include using namespace s
阅读全文
摘要:反思 三维的dp压根没看出来,看题解以后思路又很直观,找几道字符串dp练练才行 序列自动机和优化一维略 C++ / __ __ ____| |_____| |____ | | | __ | | | | include include include include include include i
阅读全文