10 2018 档案

摘要:"题目链接" Solution Meet in the middle. 考虑到 $2^{35}$ 枚举会超时,于是分成两半枚举(尽量平均). 然后不能 $n^2$ 去匹配,需要用到一点贪心: 将数分成 $p,q$ 两组,那么对于任意数 $p_i$ ; 它与 $q$ 数组中组成最大得到的值即为 最大的 阅读全文
posted @ 2018-10-25 20:03 Kevin_naticl 阅读(296) 评论(0) 推荐(0)
摘要:"题目链接" Solution 有点巧的莫队. 考虑到区间 $[L,R]$ 的异或和也即 $sum[L 1]~\bigoplus~sum[R]$ ,此处$sum$即为异或前缀和. 然后如何考虑异或和为 $k$ ? 我们做完前缀和后,可以发现对于$sum[i]$这个起点,异或上$k\bigoplus{ 阅读全文
posted @ 2018-10-25 16:30 Kevin_naticl 阅读(294) 评论(0) 推荐(0)
摘要:"题目链接" Solution 直接考虑单调栈处理出每一个点作为最小值的区间长度. 然后 $O(n)$ 找一遍最大值即可. 记得开 ,以及要注意 $0$ 的问题. Code cpp include define ll long long define N 2000001 define in(x) x 阅读全文
posted @ 2018-10-25 14:47 Kevin_naticl 阅读(175) 评论(0) 推荐(0)
摘要:"题目链接" Solution 贼有意思的一个题目。 可以发现阻止我们走的更远的就是那些需要反向走的路程。 然后发现当角度越接近 $180^\circ$ ,对我们最终的答案则更优。 所以先是一个背包把可以达到的角度处理一下,然后再直接算就好了。 卡精度。 Code cpp include defin 阅读全文
posted @ 2018-10-18 17:12 Kevin_naticl 阅读(235) 评论(0) 推荐(0)
摘要:"题目链接" Solution 传统的线性 $dp$ . $f[i][0]$,$f[i][1]$ 分别表示最后一次在 $i$ ,然后在 左边或者右边的最小步数. 然后就每次根据上一次左边和右边的状态转移过来. Code cpp include define N 20001 define in(x) 阅读全文
posted @ 2018-10-16 20:35 Kevin_naticl 阅读(216) 评论(0) 推荐(0)
摘要:"题目链接" Solution 状压 $dp$ . $f[i][j][k]$ 代表前 $i$ 列中 , 已经安置 $j$ 块草皮,且最后一位状态为 $k$ . 同时多记录一个每一列中的不能放的位置 $w[i]$. 然后就可以很轻松的转移了... 转移方程看代码. Code cpp include d 阅读全文
posted @ 2018-10-15 22:04 Kevin_naticl 阅读(286) 评论(0) 推荐(0)
摘要:"题目链接" Solution 状压 $dp$ . $f[i][j][k]$ 代表前 $i$ 列中 , 已经安置 $j$ 位国王,且最后一位状态为 $k$ . 然后就可以很轻松的转移了... 记忆化搜索还是不够啊... 只能会正向 $dp$ . Code cpp include define ll 阅读全文
posted @ 2018-10-15 21:41 Kevin_naticl 阅读(147) 评论(0) 推荐(0)
摘要:"题目链接" Solution 水水的套路题。 可以考虑到一个环内的点是可以都到达的,所以 $tajan$ 求出一个 $DAG$ 。 然后 $DAG$ 上的点权值就是 $scc$ 的大小。 对于那条可以反的边,直接建两层图就好了。 最后跑最长路,第一个节点的 $scc$ 在第二张图上的对应节点的答案 阅读全文
posted @ 2018-10-14 20:21 Kevin_naticl 阅读(205) 评论(0) 推荐(0)
摘要:"题目链接" Solution 一个简单的 或 线段树.竟然坑了我一个小时... 因为颜色很小,所以把状态压起来. 然后每个节点上的数值代表当前颜色状态. 然后节点合并很简单,直接或起来. 需要注意一下的地方是修改时的 $lazy$ ,要完全覆盖,这里不能或. Code cpp include de 阅读全文
posted @ 2018-10-11 22:01 Kevin_naticl 阅读(325) 评论(0) 推荐(0)
摘要:"题目链接" Solution 树上差分+线段树合并. 在每个节点上维护一棵权值线段树. 然后如果需要修改 $x,y$ 两点,则在 $x$ 处和 $y$ 处分别加上 $1$ 的权值. 然后在 $lca(x,y)$ 以及 $fa[lca(x,y)]$ 处减掉 $1$ . 最后面 $dfs$ 从下往上更 阅读全文
posted @ 2018-10-11 16:29 Kevin_naticl 阅读(260) 评论(0) 推荐(0)
摘要:"题目链接" Solution 可以考虑到总方案即为 $C_{nm}^k$ . 考虑到要求的是边缘都必须至少有 $1$ ,所以考虑不合法的. 第一行和最后一行没有的方案即为 $C_{(n 1)m}^k$ 第一列和最后一列没有的方案即为 $C_{(m 1)n}^k$ 然后考虑将四边状态压起来,然后可以 阅读全文
posted @ 2018-10-10 20:23 Kevin_naticl 阅读(127) 评论(0) 推荐(0)
摘要:"题目链接" Solution 可以考虑 $dp$ ,但是很显然 $(n^2)$ 降不下来. 然后考虑贪心,首先,绝对的正确的是,在同等的情况下,给后面的留更多的时间. 首先按照 $T_2$ 排序. 然后我们维护一个大根堆 每修理一栋建筑 我们就把这栋建筑的T1值加入堆 若当前无法修理 我们判断堆顶 阅读全文
posted @ 2018-10-09 20:12 Kevin_naticl 阅读(171) 评论(0) 推荐(0)
摘要:"题目链接" Solution 线段树. 观察题目可以得到一个小 $trick$ : 对于任意一个节点 $i$ ,那么和它颜色相同的上一个节点 $pre[i]$,肯定不会放在一个区间. 于是考虑对于每一个节点计算它可以献出贡献的区间. 先 $O(n)$ 扫出每一个点的 $pre$ . 然后从左往右, 阅读全文
posted @ 2018-10-04 20:34 Kevin_naticl 阅读(250) 评论(0) 推荐(0)
摘要:"题目链接" Solution 矩阵优化 $dp$. 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 $dp$ ,定义状态 $f[i][j]$ 代表前 $i$ 个物品选择 $mod~k$ 为 $j$ 的方案数. 那么转移方程也很简单 : $$ 阅读全文
posted @ 2018-10-04 20:24 Kevin_naticl 阅读(255) 评论(0) 推荐(0)
摘要:"题目链接" Solution 经典的一道线段树题,难点在于如何合并节点. 由于题目要求直线要求不相交,则斜率均大于前面的点即为答案. 所以以斜率为权值. 考虑 线段树 每一个节点维护两个值: $Max$ 代表当前节点中的最大值. $Sum$ 代表对于任意一个节点 $i$ , 其中满足$w_j Ma 阅读全文
posted @ 2018-10-03 00:20 Kevin_naticl 阅读(190) 评论(0) 推荐(0)