随笔分类 -  OJ

摘要:"hdu4081" 题意 给出n个点坐标,每个点有权值,要求得到一颗生成树,且其中有一条道路修建不需要花费,但是要求这条道路所连接的两点的权值之和除以剩下所有道路的距离花费最大。 分析 首先求最小生成树,然后枚举所有的边,即去掉这条边后,在得到的两个连通图中分别找最大权值的点,计算最优比率。 cod 阅读全文
posted @ 2017-06-02 22:46 ftae 阅读(380) 评论(0) 推荐(0)
摘要:"bzoj2002" 题意 给定 n 个值 a,表示某人跳到这个点 ( i ) 后会向后跳到 ( i + a ) 这个点,直到跳出范围 n 。 两个操作: 1. 询问,从查询的点开始需要多少次跳出范围 n ; 2. 更新单个节点的值 a; 分析 分块,这里分块的作用是平衡查询和更新的复杂度(O(sq 阅读全文
posted @ 2017-05-25 00:50 ftae 阅读(150) 评论(0) 推荐(0)
摘要:"hdu5803" 题意 给出四个整数 A B C D,问有多少个四元组 (a, b, c, d) 使 a + c b + d 且 a + d = b + c ,0 = 2,那么到十位数时(a + c b d 最少也才 18,而前面到十位数会乘 10 即得到 20)一定满足条件了(加上 a + d 阅读全文
posted @ 2017-05-23 23:12 ftae 阅读(203) 评论(0) 推荐(0)
摘要:"hdu4417" 题意 给定一个数列,每次查询一个区间,和一个值h,问区间内有多少个数小于等于h。 分析 二分数的个数,划分树求解判断是否满足条件,划分树求解的是第k小的数,那么前面k个数肯定不大于这个数了,比较这个数和h即可。 code cpp include include include i 阅读全文
posted @ 2017-05-18 13:09 ftae 阅读(187) 评论(0) 推荐(0)
摘要:"poj2104" 题意 给出一个序列,每次查询一个区间,要求告诉这个区间排序后的第k个数。 分析 划分树模板,O(mlogn)。 1. 建树。根据排序之后的数组,对于一个区间,找到中点的数,将整个区间分为左右子树(在子区间内数与数的相对位置保持不变),递归向下分割。 2. 查询。toleft[p] 阅读全文
posted @ 2017-05-18 13:07 ftae 阅读(291) 评论(0) 推荐(0)
摘要:"D. 实验室传染病" 题意 给出 n 个人的位置,以及每个人的传染范围,当一个人患病时,他的传染范围内(包括边界上)的人全部会被感染并继续向外传播。 求以每个人为传染源最多有多少人被感染。 分析 首先二分预处理每个人一次最远感染到的人,然后线段树维护区间,表示每个点最远感染到右边的人以及感染到左边 阅读全文
posted @ 2017-05-17 09:37 ftae 阅读(169) 评论(0) 推荐(0)
摘要:"poj2069" 题意 求一个覆盖所有点的最小球体的半径。即求空间内一点到所有点的距离的最大值最小的点。 分析 模拟退火算法,但这道题竟然不用随机函数就能过了,主要体现了算法的渐近收敛性, 起始点随意取,然后找到相距最远的点,按比例向这个点位移,而这个比例在一定程度上是逐渐减小的,最终达到要求的精 阅读全文
posted @ 2017-05-12 17:01 ftae 阅读(201) 评论(0) 推荐(0)
摘要:"poj1379" 题意 给出 n 个洞的坐标,要求找到一点使得这一点距离最近洞的距离最远。 分析 通过这道题学习一下 "模拟退火算法" , 这种随机化的算法,在求解距离且精度要求较小时很有用。 简而言之,由随机选取的多个初始点,进行多次的随机变换,并根据是否更优而选择是否保留答案, 那么首先要选择 阅读全文
posted @ 2017-05-12 11:26 ftae 阅读(355) 评论(0) 推荐(0)
摘要:"hdu5950" 题意 $给出 f_1 , f_2 ,以及递推式 f_n = 2 f_{n 2} + f_{n 1} + n^4 ,求 f_n (mod=2147493647)$ 推导一下。 $$\begin{Bmatrix} f_n\\ f_{n 1}\\ f_{n 2}\\ (n+1)^4\\ 阅读全文
posted @ 2017-05-10 22:38 ftae 阅读(182) 评论(0) 推荐(0)
摘要:"poj3417" 题意 给出一颗 n 个节点, n 1 条边的树,再加上 m 条新边,允许删掉树边和新边各一条,问能使树分为两部分的方案数。 分析 在树的基础上加上不重复的新边一定会构成环,那么考虑的就是怎么拆分环。 对于给出的新边(u, v),构成的环就是,u LCA(u, v) v u,将环上 阅读全文
posted @ 2017-05-10 22:19 ftae 阅读(377) 评论(0) 推荐(0)
摘要:LCA 在有根树中,两个节点 u 和 v 的公共祖先中距离最近的那个被称为最近公共祖先(LCA,Lowest Common Ancestor)。 有多种算法解决 LCA 或相关的问题。 基于二分搜索的算法 首先搜索树中各个节点的深度; Tarjan 离线算法 "hdu2586" 一道模板题,求二叉树 阅读全文
posted @ 2017-05-09 00:15 ftae 阅读(434) 评论(0) 推荐(0)
摘要:"UVALive 5731" 题意 一颗 n 1 条边的有向树,要求整棵树成为强连通图,一次操作即构建一条路(一笔画), 限制: 新建的路上的所有边必须与原有的边逆向,即构建的路必须在原有的边和点上, 操作构建的路可以存在公共边或公共点, 一次操作构建的路只能有同一点或边一次 分析 要成为强连通图, 阅读全文
posted @ 2017-05-05 21:52 ftae 阅读(212) 评论(0) 推荐(0)
摘要:"C. Friends" 题意 对于任一点,求到此点距离不超过6的节点数。 分析 第一次dfs,形成一个以 1 为根的有向树,设 down[i][j] 为以i为根节点,距离 i 点距离不超过 j 的节点数(这些节点都是 i 的子孙节点) 第二次dfs,设 up[i][j] 以 i 为起点,距离 i 阅读全文
posted @ 2017-05-01 10:49 ftae 阅读(180) 评论(0) 推荐(0)
摘要:"RPG的地图" 题意 判断点是否在不规则多边形内, 分析 首先,所有横、纵坐标都+1000,方便标记和累加。 1. 在边上也满足条件,对于垂直或平行于 x 轴的线段,直接在枚举线段的时候标记下其中的所有点即可。对于其它线段,表示成 的形式,枚举 x 找到,整数 y 即可。 2. 对于在里面的点,通 阅读全文
posted @ 2017-05-01 10:47 ftae 阅读(376) 评论(0) 推荐(0)
摘要:"Range Modular Queries" 题意 给出一个数列,q个查询,问查询区间内有几个数 a[i] % x == y。 分析 其实裸的分块就能过了,跑的还特别快。 这里分块的作用就是排序。 在x较小时可以暴力打表,x较大时枚举显得更加高效。 code cpp include using n 阅读全文
posted @ 2017-05-01 10:43 ftae 阅读(182) 评论(0) 推荐(0)
摘要:"Maximum Subarray Sum" 题意 给你一个大小为N的数组和另外一个整数M。你的目标是找到每个子数组的和对M取余数的最大值。子数组是指原数组的任意连续元素的子集。 分析 "参考" 求出前缀和,问题变成了O(n n)复杂度的问题,但是仍然不能解决问题。 设prefix为前缀和,设i p 阅读全文
posted @ 2017-05-01 10:40 ftae 阅读(360) 评论(0) 推荐(0)
摘要:"hdu4638" 题意 给定一个序列,序列由1 N个元素全排列而成,求任意区间可组成的连续的段数,比如[1,2,4]两段{[1,2],[4]},[1,2,4,3]一段{[1,2,3,4]}。 对于查询的区间询问的是可组成的连续的数的段数最小值。 分析 分块排好序,O(1)的维护就是每新添加一个元素 阅读全文
posted @ 2017-05-01 10:38 ftae 阅读(218) 评论(0) 推荐(0)
摘要:"参考blog" "参考论文" "参考论文" 题目 & 题解 裸2 SAT "poj3683" "poj3207" "poj3678" "poj3648" 2 SAT + 二分法 "poj2723" "poj2749" "hdu3622" "hdu3715" 一点总结 1. 寻找对立关系,一般是每回 阅读全文
posted @ 2017-05-01 10:26 ftae 阅读(774) 评论(0) 推荐(0)
摘要:"hdu3715" 题意 给出一个递归的伪代码,当 x[a[dep]] + x[b[dep]] != c[dep],就向下递归,给出a,b,c数组的值 问 dep 最大多少。其中 0 include include include include using namespace std; const 阅读全文
posted @ 2017-05-01 10:16 ftae 阅读(222) 评论(0) 推荐(0)
摘要:"hdu3622" 题意 每回合给定两个坐标点,可以选择一个放置炸弹,自己决定炸弹的半径,问 n 个回合后,使炸弹半径最小值最大。 分析 存在对立关系:每回合只能选择一个地方放置炸弹。i 表示 第一个位置 i + n 表示第二个位置。 当 i 、j 存在交点时,i j + n,j i + n 。 c 阅读全文
posted @ 2017-05-01 10:14 ftae 阅读(252) 评论(0) 推荐(0)