七月迷惑行为大赏
七月做题记录
总还是得写点东西吧
至少每天做了啥题还是要写的
7.7
CF1366E Two Arrays
考虑到
假设 \(d_1 = p_1^{a_1}\), \(d_2 = \frac{n}{p_1^{a_1}}\) , 易知 \(gcd(d1, d2) = 1\)
若 \(gcd(n, d_1 + d_2) > 1\), 那么必存在一个质数 \(p'\) , 满足 \(p' | n\) 且 \(p' | d_1 + d_2\)
可知 \(d_1\) , \(d_2\) 中有且仅有一个数被 \(p'\) 整除, 另外一个不被 \(p'\) 整除
与 \(p' | d_1 + d_2\) 矛盾
所以就这样选就行了
不会做
CF1365F Swaps Again
发现不论怎么交换, 原来下标为 \(i\) , \(j\) 的满足 \(i + j = n + 1\) 的两个数
不论怎么换, 他们新的下标 \(i'\) , \(j'\) 仍然满足 \(i' + j' = n + 1\)
然后瞎杰宝搞搞就行
不会做
CF1358E Are You Fired?
看到这个东西肯定第一眼就是二分
但是并不满足单调性, 考虑他给的那个 \(x\)
根据 \(x > 0\) , \(x = 0\) , \(x < 0\) 分析
发现 \(x \geq 0\) 时直接选 \(n\) 是最优的, \(x < 0\) 时满足要求时, \(k \geq \lceil \frac{n}{2}\rceil\)
然后发现这个时候满足单调性了, 直接拿个指针一顿乱指就完了
不会做
7.8
考试, 然后被吊打
题目都挺好的, 介于版权原因就不放上来了
7.9
信息组禁止开电脑.jpg
7.10
信息组禁止开电脑.jpg
7.11
CF1354F Summoning Minions
发现必然是先填满前 \(k - 1\) 个位置, 第 \(k\) 个到第 \(n - 1\) 之间的填进去然后再删掉
第 \(n\) 个放进去
可以 DP , 这里采用费用流解法
用代价提前计算那套思想
发现每一个双元组在不同的时间放进去代价可以计算出来
只跟这个双元组和放进去的时间有关
费用流即可
CF1344B Monopole Magnets
设黑格子为 \(1\) 白格子为 \(0\)
那么左 \(0\) 右 \(1\) 这种 \(0\) 左边的就都不能放 \(S\)
还有左 \(1\) 右 \(0\) 等同
分析得到, 若一行都不能放 \(S\), 或者一个黑格子不能放 \(S\)
就不合法
不然就是黑色联通块个数
7.12
降智
7.13
连续两天看错题.jpg
7.29
其实中间的时间搞学科去了, 咕咕咕了很久之后发现
如果每天做的题不写一下题解的话其实帮助似乎并没有那么大, 至少写题解是把问题重新思考一遍的过程
[HAOI2018]苹果树
考虑到大小为 \(n\) 的树共有 \(n!\) 棵, 并且大小为 \(n\) 的树有 \(n + 1\) 个分支
所以题目就是要你求所有可能的树中 所有点对距离的和 的和
如果我们去 DP 这个树的形态的话, 这个加点或者合并的贡献是很难维护的
考虑转换问题
假设 \(i\) 这个点为根的子树大小为 \(sz_i\) , 那么每一颗包含这个子树的树中, 他会对答案有一个 \((n - sz_i)*sz_i\) 的贡献
考虑有多少种树包含这个点为根的子树
首先前 \(i\) 个点形成的树有 \(i!\) 种, 然后形成一颗大小为 \(sz_i\) 的子树的方案数为 \(sz_i!\)
那么我们要从剩下的 \(n - i\) 个点中找出 \(sz_i - 1\) 个点来构成这颗子树, 所以方案数是 \(\binom{n-i}{sz_i - 1}\)
这样我们就考虑完了前 \(i\) 个点和 \(i\) 所为根的这棵子树的所有形成方式, 剩下还有 \(n - sz_i - i + 1\) 个点没考虑
这些点不能连到 \(i\) 的子树内部去, 所以只可能连到前 \(i - 1\) 个点的剩下 \(i - 1\) 个分支中去(有一个分支被 \(i\) 占了)
所以这一部分的方案数是
所以总的方案数就是
感觉自己对于转变题目模型的能力还不够
而且最近做题似乎
就没有一道自己会做的...
[AGC002F] Leftmost Ball
算神仙题了吧...
看到题目应该会想到 DP (我计数学傻了, 啥也不会了, 上来先往二项式定理上套...)
发现对位置 DP 肯定是不行的, 首先第一维就是 \(O(n * k)\) 的, 并且记录的信息太少了
然后分析发现, 在一个合法的序列中, 对于任意一个前缀, 白球的数量不少于有颜色的球的数量(白球不算)
那么我们就可以对颜色 DP 了, 设 \(f[i][j]\) 表示在这 \(n * k\) 个位置中, 我们放了 \(i\) 个白球, 并把 \(j\) 种颜色的 \(k - 1\) 个球都放进去了的方案数
考虑加进去一个颜色, 有
但其实这样是会把方案算重的
考虑从前往后第一个空的位置, 如果我们当前用颜色 \(i\) 没有选到这个位置, 而是在之后用颜色 \(j\) 选到了这个位置
设 \(i\) 选的位置集合为 \(S1\) , \(j\) 选到的位置集合为 \(S2\)
这样将这种方案算了一次
发现如果我们的 DP 式是这样的话, 我们先用 \(j\) 选 \(S2\), 再用 \(i\) 选 \(S1\) 这些位置
这样的方案也被算了一次, 重了
那么我们钦定这一次选的这些球第一个放在最前面的空的位置
那么就可以保证先放的颜色的第一个球在后放的颜色的第一个球前面
所以转移式变为
相当于钦定一个球放在最前面
由上述分析可知, 放白球也要把他强制放在第一个才行
所以有 \(f[i][j] += f[i - 1][j]\)
[CF1327F] AND Segments
发现位与位之间是独立的, 分开讨论
首先差分出哪些位必须为 \(1\) , 设 \(f[i]\) 为第 \(i\) 位是 \(0\) 的方案数
那么如果这一位被钦定为 \(1\) 的话, \(f[i] = 0\)
否则必为 \(f[i] = \sum f[j]\) 的形式
如果 \([j+1, i-1]\) 区间中存在 \([l, r]\) 这个区间不能 \(0\) 的限制, 那么这个 \(j\) 就不能转移到 \(i\)
所以设 \(lmx_i\) 为 \(i\) 左边第一个 \(0\) 能放到的最左边的地方, 发现这个是个前缀最大值
预处理完后双指针处理 DP 即可