随笔分类 - 比赛题解
摘要:我多久没更新这个系列了啊 E 把格子分成两类,每一类之间的坐标均可互相走到。 然后将这里面的点都旋转 \(45\) 度,于是这个问题就被转换成曼哈顿距离的问题了。 我们可以把 \(x\) 和 \(y\) 拆开计算。 然后我们排个序,求个差分,然后对于每一个区间算贡献即可。 code F 非常简单的树
阅读全文
摘要:省流:输+赢 D 按位分析。 既然两个数异或后的结果是 \(C\),那就考虑 \(C\) 中为 \(1\) 的数中有几个是在 \(X\) 当中的。 假如 \(\text{a - popcnt(X) == b - popcnt(Y)}\),那么在 \(C\) 中为 \(0\) 的数中随便选 \(\te
阅读全文
摘要:E 建反图 + 拓扑排序。 先求出直接与 \(n\) 连接的点的答,就是最后一辆车的发车时间。然后再做拓扑排序。 假如我们知道点 \(u\) 的答案为 \(ans_u\) 并且 \(u,v\) 相连,那么我们点 \(v\) 到点 \(u\) 是在第 \(ans_u - w\) 分钟之前的第一班这的发
阅读全文
摘要:problem 考虑使用 dfs 模拟。 由于一个程序可能在不进入无限循环的情况下运行很多步,这将会非常缓慢。因此,接下来要加速模拟,可以用记忆化搜索。 在网格中,机器人的可能状态(位置和朝向)只有 \(4 \times R \times C \le 6400\) 种情况。 并且执行程序可能会处于的
阅读全文
摘要:E 我们可以知道每一个点在每一轮加多少,具体如下: 假如现在操作的点的为 \(k\)。那么所有的数都至少会加 \(\dfrac{A_k}{n}\)。但是肯定有剩的,剩了 \(A_k \mod n\)。 很明显,\(A_k \mod n\) 会分给接下来的 \(A_k \mod n\) 个数。 这样我
阅读全文
摘要:题解不应该流露出太多感情,对吧。 E 建议评黄。 首先我们可以想到暴力 dp。 定义 \(dp_i\) 为以 \(a_i\) 为结尾满足题目意思的最长序列的长度。 很明显,时间复杂度为 \(O(n^2)\) 不可通过本题。 我们发现一个序列以 \(a_i\) 为结尾,那么上一位绝对是以 \(a_i-
阅读全文
摘要:E 其实就是构造出最小的方案。 我们把二进制第 \(i\) 为 \(1\) 的所有数放到一起查询。 所以如果第 \(i\) 次询问的回答是 \(1\) 那么有问题的饮料二进制下的第 \(i\) 为就是 \(1\)。 所以就可以计算出有问题的饮料的编号了。 code F 暂时没写 G 学习_ChiFa
阅读全文
摘要:E 数位 dp。 定义 \(dp_{pos,s,t,0/1}\) 为在第 \(pos\) 位,当前数字和是 \(s\),这个数模规定的数字和为 \(t\),是 \(/\) 不是极限的情况数。 于是我们枚举规定的数字和即可。 然后就是套路了。 假如在极限枚举范围就是 \(1\) 到 \(n\) 的第
阅读全文
摘要:输 E 对于 \((u,v)\): 若 \(a_u = a_v\),则把 \(u\) 和 \(v\) 扔到同一个并查集里 否则连接两个点 然后跑一遍 dp 即可。 code F 根号分治 如果 \(a_i \ge \sqrt n\) 直接暴力,否则使用前缀和记录。 code 所以这场 \((\tex
阅读全文
摘要:A 我们定义 \(dp_{dep}\) 为第 \(dep\) 层会对上一层产生多少的影响。 如果有一层的影响大于 \(0\),在足够次计算后那么肯定是正号。如果小于零那就一定是负号。 由于越久影响到的,对答案的贡献就越大。 所以层数倒叙枚举即可。 code
阅读全文
摘要:problem 我们定义 \(\text{T}\) 对应 \(n + 1\),\(\text{U}\) 对应 \(n + 2\),\(\text{F}\) 就是 \(-\text{T}\)。 现在我们知道了每一个数代表着什么值,用 \(val\) 数组来表示。 然后我们构想两个数组 \(pT\) 和
阅读全文
摘要:上次说我的写法low的人的AT号在这里!!( 我又来提供 low 算法了。 从 D 开始。 T4 我们把 \(\text{A}\) 看成 \(1\),把 \(\text{B}\) 看成 \(2\),把 \(\text{C}\) 看成 \(3\)。 那么就可以想到状压,然后把每一行和每一列的情况状态即
阅读全文
摘要:直接从 D 开始了。 D 可可爱爱的二分捏。 check 就按照题目里写的就行了。 然后 \(l\) 的初值要注意一下,就是 \(\max^{i \le n}_{i=1}a_i\)。 代码: #include<bits/stdc++.h> #define int long long using na
阅读全文
摘要:我直接从第三题开始讲了。 T3 把数组 \(A\) 从大到小排序。 然后从前往后把前 \(q\) 个数加起来,然后判断这 \(q\) 个数的和与 \(d\) 的大小关系,如果大了就变成 \(d\)。 然后有些细节就看代码吧。 #include<bits/stdc++.h> #define int l
阅读全文