八月迷惑行为大赏
八月迷惑行为大赏
前言
最近状态一直都不太好, 整天晕晕乎乎的
可能是因为这个科技楼装修, 人体共振???
8.11
CF840C On the Bench
好题, 方法很多, 讲一个复杂度比较劣的
发现一个事实, 若 \(i \times j\) 为完全平方数, \(i \times k\) 为完全平方数
则有 \(j \times k\) 为完全平方数, 证明就不证了
那么相当于把 \(n\) 个不同的数分为 \(m\) 个集合, 相同集合的数不能相邻, 求排列数
设 \(f[i][j]\) 为已经放了前 \(i\) 个集合, 有 \(j\) 个相邻的数, 考虑第 \(i + 1\) 个集合
那么我们现在就是要将第 \(i +1\) 个集合的数插入前 \(i\) 个集合组成的排列中
设 \(g[k][l]\) 为把 \(k\) 个不同的数分成 \(l\) 段的方案数
那么我们会得到下列转移方程
第一个很好理解, 数不同, 看第 \(i\) 个数是单独成一个集合还是放到别的集合里去
设前 \(i\) 个集合有 \(sum\) 个数, 第 \(i + 1\) 个集合有 \(t\) 个数, 那么我们假设把第 \(i + 1\) 个集合分成 \(k\) 段, 然后选 \(l\) 个插进原来的前 \(i\) 个的 \(j\) 个相邻的中, 那么这 \(l\) 个位置就合法了, 剩下的 \(k - l\) 个不能插进这 \(j\) 个中, 那么就只能插在其他的位置了
复杂度 \(O(n^3)\)
CF814E An unavoidable detour for home
很早之前的考试原题, 考试的时候乱搞水过去了
那个时候想东西不仔细, 现在重新想了一遍, 很清晰
设 \(f[i][j]\) 为前 \(i\) 个, 最后 \(j\) 个跟 \(i\) 同层, \(g[i][j][k]\) 为下一层有 \(i\) 个点, 上一层有 \(j\) 个度数为 \(1\) 的, \(k\) 个度数为 \(2\) 的, 这一层全都连到上一层且上一层剩余的边都互相连完的方案数
转移自己推一推就好了
8.12
咕咕咕
8.13
杂记
最近在尝试改码风, 尝试模块化代码, 多用点 namespace
所以写题的速度有点慢, 不过似乎这么写会好调一些??? 也不知道 namespace 会不会跑得更快一些
晚上开了一场 CF 的 Virtual Contest, 发现 Div2 似乎简单了一点???
不过做题速度还是太慢了, 就算能做出来也要很久时间
不是很适应这种需要短时间内切题的比赛, 需要多加练习
以后先开 Div2 练下手吧, 等什么时候能够快点切题再去看 Div1
我好像还没有 Div1 的实力
而且为什么 CF 的某些题, 写起来麻烦的死啊!!!!
关于圆方树
似乎很多树上的问题都能扔到图上面去搞
无非就是方点和圆点的贡献不同
想清楚了问题之后其实还是很好写的
但是有一些题目是借助了仙人掌的一些性质, 所以可能广义圆方树并不适用???
做的题目还是少了一点, 多积累一点之后可能收获会大一点吧
[HAOI2017]新型城市化
补集转化之后发现就是求二分图的最大独立集
转化为总点数减去最大匹配, 考虑某一条边删去是否会对会减少最大匹配数
发现跟稳定婚姻的模型差不多
所以当且仅当满足两点之间满流并且在残量网络上在同一联通分量中不会使最大匹配减少
[HNOI2009]无归岛
其实题目有很好的性质, 不过直接 dfs 树建出来, 对非树边所覆盖的链抠出来讨论一下就行了
[APIO2018] Duathlon 铁人两项
建出圆方树, 考虑如何计算 \(S, T\) 中有多少个点合法
发现将圆点点权设为 \(-1\) , 方点点权设为环大小, 两点之间路径点权和即为合法点数
然后对于每个点算一下作为 \(C\) 的贡献就行了
[SDOI2018]战略游戏
建出圆方树, 可以证明割掉一个点使 \(u, v\) 两点不连通的方案数是两者路径上圆点个数
看到这个 \(\sum|S|\) , 我们往虚树上靠
将点权放到边权上后, 发现合法点数就是虚树边权和(可能包括最上面那个点, 讨论一下就行)
运用某结论即可
数据结构学傻的我打算直接树剖..., 好像其实也不是很难码
CF1389F Bicolored Segments
晚上的题, 先离散化
发现如果给点染上颜色, 规定只能让该颜色的区间覆盖他的话, 好像可以 DP
然后发现真的可以 DP
从前一个不同色的点转移即可, 线段树优化一下
(其实这样的话多几种颜色也不是不可以???)
[ZJOI2017] 仙人掌
不合法情况先判掉, 然后发现把环去掉之后就是一棵森林了
不同的树状态直接乘起来就行
发现连边事实上就是求拿若干条链去覆盖这棵树, 不一定要覆盖满且不会有一条边被两条链覆盖的方案数
那么设 \(f_u\) 代表 \(u\) 子树内的方案数
那么儿子伸上来的边和自己伸出去(如果是根就没有)的边需要互相配对
设个 \(g_i\) 表示 \(i\) 条边互相配对
推一推转移方程发现其实就是 \(\prod g[d[i]]\) , \(d[i]\) 为删掉所有环之后 \(i\) 这个点的度数
其实只要转化为链覆盖剩下来的就挺水的了
后记
如果每天都沉下心来的话, 其实进步是很大的, 去年联赛前的集训状态就很好
虽然说前几天状态不是很好, 不过这几天又慢慢变好了
每天还是能做很多题的, 收获也很大
所以, 那种零散的时间就用来 背单词? 学线代?
不过线代确实是要好好学, 数学太差了连 OI 都搞不了, 真是 NB
每天还是至少要保证写了 6 道题吧
有时间或许可以多打一打 Virtual Contest ???
Div2 应该很好打吧, 争取三天打一场???
不知道, 先试几天吧
每天就是拿剩下的一点碎片时间来更博, 大鸽子无疑了
8.14
考了场 DP , 然后自闭了...
感觉自己有一些方面还差的很多啊
比如说对于问题模型的建立, 还有对于问题复杂度的优化
总而言之还是要静下心来想题, 然后提升这两种能力, 这样才能有所提高
8.15
最不想发生的事情还是发生了, 平常的糟糕状态延续到了正式考试中
APIO 大爆炸, 好像其实本来水平也不行
今天就不更了吧, 我回去想想为什么状态这么差
8.20
在经历了 APIO 和 NOI 同步赛的大爆炸之后, 我终于发现了自己的问题
太菜了
最近两天把图论写完了, 数论正在肝
希望状态能够在短时间内回暖吧
还是需要更加努力, 不然明年就真的得退役了
8.24
咕咕咕了几天
上午考 2020 百度之星的复赛, 然后因为傻逼编译器的原因就没切 E
然后 C 莽了一波结论但是不会理性证就没上, 下回感性证明是对的就差不多了
然后下午改了题, 把原来的一道构造题写了
晚上打了场 Virtual Contest , 不会做 E
以为 Trie 是 \(O(L)\) 的, 写完疯狂 RE 后发现是 \(O(L ^ 2)\) 的
还是以为切了题太高兴了
下回还是得好好证明
补一波题解
2020百度之星复赛
A
没啥好说的, 等比序列求和一波带走
B
发现最多只会进行一次加一操作
证明: 一次加一操作肯定是推平前面的一段连续一
然后进一位, 进了位的那一位后面的不同的只能直接改, 前面的用不断加一来改不如直接改, 因为 \(2 ^ i \geq i\)
然后就直接枚举把哪一段平推, 讨论一下就行了
C
考虑一个贪心策略, 就是把他从大到小排完序后, 每 \(k\) 个为一组, 大的放左边, 小的放右边
然后 \(000000111100000011110000001111\) 这样去放, 每一组放在一的位置, 还是大的尽量放左边
证明好像还挺简单的
D
jiushi不会
E
考虑设 \(f[i][j]\) 为 \(Alice\) 剩 \(i\) 滴血, \(Bob\) 剩 \(j\) 滴血
然后把转移方程推一波式子之后发现相当于格路上走到最上面一行, 然后最后再向上走一步
每一步都有贡献, 推波式子之后前缀和
F
这啥?
Codeforces 662 (Div.2)
A, B 就不讲了
C
贪心的把个数最多的隔最开摆放, 有多个的话讨论一下发现只用右端点加上一个贡献就行
D
一个点的贡献就是在极大块中这个点能够扩展到的最远距离
直接 DP 求就行了
E1
有一个很好的做法就是设 \(f[i][j]\) 为前 \(i\) 个字符串, 选择的第 \(i\) 个字符串是 删掉第 \(i\) 个字符串 的某个字符 的所有字符串中 排名为 \(j\) 的那一个
但是你需要排序, 直接排是 \(O(L^2logL)\) 的, 空间也承受不起
考虑二分加哈希后就可以 \(O(logL)\) 的 check 了, 所以排序的复杂度就是 \(O(Llog^2L)\)
E2
不会
8.25
上午考试, 题目有点小水就不放上来了吧
下午改题
晚上字符串加计算几何, 听了个寂寞
8.26
上午考试
2018百度之星复赛
A, B, C
水题, 不讲了
D
很暴力的做法,设 \(f[a][b][c][d][e]\) 为每个序列到了哪个位置的方案数
发现只有当 \(A[a] = B[b] = C[c] = D[d] = E[e]\) 才有值, 由于数据随机, 所以能过...
E
可以把每种颜色重新随一个 \([0, k - 1]\) 的权值, 然后跑一遍 \(O(2^knm)\) 的 BFS, 就设 \(f[i][j][S]\) 为当前在 \((i, j)\) 经过的颜色集合是 \(S\)
首先最后的答案肯定只有 \(k\) 种颜色, 那么如果这 \(k\) 种颜色在某一种 \(rand\) 中 \(rand\) 到的权值两两不同就可以算出来了, 而这样的正确率是 \(\frac{k!}{k^k}\) , 大概是 \(0.6\%\) , 数据很小, \(rand\) 他个一千组正确率就是 \(99.8\%\) 得了
F
直接看官方题解吧, 网上也有题解
然后最近准备把 ARC 的题目做一下, 为什么不做 AGC 呢
因为不会, 基本上 ARC 最后一题我都要想比较久, 还是比较锻炼思维的
AGC 就... 但是 ARC 做的还挺快的
更一波题解吧
8.27
终于不用考试了