摘要: 嘟嘟嘟 二分好题。 怎么二分呢?反正我是没想出来。 看了题解。 因为只有一个为奇数的点,所以对于一个位置x,求出区间[0, x]的教总和,如果为奇数,说明x取大了;否则x取小了(妙啊)。 虽然答案在int内,但是L + R可能会爆int,导致有几个点TLE了,所以还是都开long long 吧。 1 阅读全文
posted @ 2018-10-23 23:32 mrclr 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 一道不错的题,解法不少。 最易于理解的是最小生成树的做法: 首先每两个点之间都连一条长度为这两个点的距离的边,形成完全图。 然后跑最小生成树,直到剩k个联通块,这时候合并成k - 1个联通块的边的长度就是答案(注意,是连接两个联通块的边,否则就不是部落间的距离了)。 正确性很显然。因为这保证 阅读全文
posted @ 2018-10-23 22:17 mrclr 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 首先看到这种序列的问题,我就想到了逆序对,然后就想如何把这道题转化。 首先要满足这个条件:ai <bi。那么我们把所有数按第一次出现的顺序重新赋值,那么对于新的数列,一定满足了ai < bi。 因为要转换成逆序对,所以先出现的数赋成更大的值,得到了ai > bi。 接下来的操作都是在新的序列 阅读全文
posted @ 2018-10-23 21:44 mrclr 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 考虑dp。 对于ai,和他能匹配的bj只有9个,所以我们考虑从这9个状态转移。 对于ai 能匹配的一个bj,当前最大的匹配数一定是[1, j - 1]中的最大匹配数 + 1。然后用树状数组维护前缀匹配数最大值就行了。 1 #include<cstdio> 2 #include<iostrea 阅读全文
posted @ 2018-10-23 17:36 mrclr 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 题面很迷,看这个吧。 首先暴力很简单,从每一个叶子节点开始爬,直到那条特殊的边。 正解稍微想想就能搞出来:(x, y)这条特殊的边把整棵树分成了两部分,然后我们分别从x, y开始在他的那部分子树dfs,求出到达节点v时满足条件的一个区间。因为从v到u是向下取整,那么反过来合法的区间就是[k 阅读全文
posted @ 2018-10-23 16:46 mrclr 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 刚开始我以为如果这头牛撞开一个干草堆的话,获得的冲刺距离只有新增的部分,但实际上是加上原来的部分的。 暴力很好写,区间排完序后一次判断每一个区间是否能逃脱,复杂度O(n2)。 优化想起来也不难:如果一个区间 i 能逃脱,区间 j 能到达 i,则 j 也能逃脱。所以对于每个区间开一个标记数组, 阅读全文
posted @ 2018-10-23 15:34 mrclr 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 01分数规划之最优比率环。 主要是发一下基于dfs的spfa。跑的贼快,原来总用时2000多ms还TLE了两个点,改成dfs后总用时直降43ms! 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include 阅读全文
posted @ 2018-10-23 14:37 mrclr 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 这道题很多题解说是二分图染色+模拟,然而其实一个贪心就够了。 如果s1或s2当前栈顶的元素刚好是排好序后的第k个数,那么自然要弹出栈;否则贪心的放入s1栈,同时要判断合法性;如果不行,再看看能否放入s2;如果还不行就输出0。 判断能否放入s1就是看看这个数之后如果有超过两个比s2栈顶元素还大 阅读全文
posted @ 2018-10-23 10:44 mrclr 阅读(142) 评论(0) 推荐(0) 编辑