上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 69 下一页
摘要: 倍增预处理。 先看一下这张图的结构,因为出度都是$1$,所以路径是唯一的,又因为每个点都有出度,所以必然有环,也就是一直可以走下去。 接下来我们需要记录一些值便于询问: 设$t[i][j]$表示从$i$节点出发,走了${2^j}$步之后,到达的节点编号为$t[i][j]$。 设$s[i][j]$表示 阅读全文
posted @ 2016-08-24 20:46 Fighting_Heart 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 答案的来源不外乎于3种情况: 纯粹走路,用时记为${t_1}$;纯粹乘车,用时记为${t_2}$;乘车一定距离,然后走路,用时记为${t_3}$。 但是${t_1}$显然不可能成为最优解。 前两个时间都挺好算的,${t_3}$算的时候要讨论一下。 如果是$a*k+t>=b*k$,那么也就是说第一个$ 阅读全文
posted @ 2016-08-24 17:03 Fighting_Heart 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 排序,$O(n)$扫描。 $city$与$tower$混在一起排序,然后从左到右扫描一遍,计算出每一个$city$左边的$tower$对他的影响。 再从右到左扫描一遍,计算出每一个$city$右边的$tower$对他的影响。然后再扫描一遍计算出$max$就可以了。 阅读全文
posted @ 2016-08-24 16:12 Fighting_Heart 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 简单$dp$。 如果$a[i]>a[i-1]$,那么$dp[i]=dp[i-1]+1$。否则,$dp[i]=1$。答案为$dp[i]$中的最大值。 阅读全文
posted @ 2016-08-24 14:38 Fighting_Heart 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 双指针。 先统计一下字符种类数$sum$,然后进行尺取。 如果目前的区间$[L,R]$中不同字符个数$k<sum$,那么区间右端往右移动一位,更新种类数。 如果目前的区间$[L,R]$中不同字符个数$k==sum$,更新答案,然后区间左端往右移动一位,更新种类数。 阅读全文
posted @ 2016-08-24 14:29 Fighting_Heart 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 统计一下有多少行多少列被占领了。 阅读全文
posted @ 2016-08-24 13:56 Fighting_Heart 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 每一组的和为$\frac{{2×\sum\limits_{i = 1}^n {a[i]} }}{n}$,然后暴力配对就可以了。 阅读全文
posted @ 2016-08-24 13:14 Fighting_Heart 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 统计每一条边的贡献,假设$u$是$v$的父节点,$(u,v)$的贡献为:$v$下面大学个数$f[v]$与$2*k-f[v]$的较小值。 阅读全文
posted @ 2016-08-24 13:00 Fighting_Heart 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 要保证总时间最短,因为总时间计的是最后一个人到达的时间,也就是最后一个人要求尽快到达,也就是说我们要让最后一个人乘车时间尽量多。再仔细想想可以发现每个人的乘车时间和走路时间都是一样的。 因此,可以二分每个人的乘车时间$m$,然后进行验证,如果发现某一个人的乘车时间不到$m$,那么$m$不可取,上界缩 阅读全文
posted @ 2016-08-24 10:46 Fighting_Heart 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 并查集,构造。 先看一下图的特殊性,按照这种输入方式,一个点的入度最多只有$1$,因此,问题不会特别复杂,画画图就能知道了。 如果给出的序列中已经存在$a[i]=i$,那么随便取一个$a[i]=i$的$i$作为$root$,剩下的每一条边$a[i] \to i$,可以用并查集来处理,如果发现某条边$ 阅读全文
posted @ 2016-08-24 08:21 Fighting_Heart 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 简单$dp$。 记$dp[i][j]$表示$i$天过去了,并且第$i$天的时候是状态$j$的情况下,前$i$天最少休息天数。 递推式很容易得到: $dp[i][0]=min(dp[i-1][0],min(dp[i-1][1],dp[i-1][2]))+1$。$if\left( {1\& a\left 阅读全文
posted @ 2016-08-23 22:12 Fighting_Heart 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 把每一个墙的位置都存下来。 如果墙的个数$sz>n+m$,显然无解。 否则枚举炸哪一行,假设枚举炸第$i$行,去掉第$i$行的所有墙,看剩下的墙是否处于同一列,如果是,那么这就是一个解。 阅读全文
posted @ 2016-08-23 21:53 Fighting_Heart 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 快速幂,费马小定理,逆元。 设$dp[n]$表示$n$次操作之后的概率,那么$dp[n] = \frac{{(1 - dp[n - 1])}}{2}$。$1-dp[n - 1]$表示上一次没有在中间的概率,除以$2$表示$n$次操作之后的情况数是$n-1$次操作之后的两倍,所以要除以$2$,这个画画 阅读全文
posted @ 2016-08-23 17:32 Fighting_Heart 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 思维,简单树$dp$。 首先计算出每一个子树包含多少个节点,记为$f[i]$。然后就可以从$root$开始推出所有节点的期望了。 现在已知$fa$节点的答案为$ans[fa]$,假设要计算$fa$的一个儿子$v$的期望,那么$ans[v]=ans[fa]+1.0+(f[fa]-f[v]-1)/2.0 阅读全文
posted @ 2016-08-23 10:53 Fighting_Heart 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 计算几何,极角排序,双指针,二分。 直接找锐角三角形的个数不好找,可以通过反面来求解。 首先,$n$个点最多能组成三角形个数有$C_n^3$个,但是这之中还包括了直角三角形,钝角三角形,平角三角形,我们需要减去这些三角形的个数。 如果在$n$个点中找到了$A$个直角,那么必然有$A$个直角三角形。 阅读全文
posted @ 2016-08-23 09:14 Fighting_Heart 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 思维,树形$dp$。 首先选择一个度不为$0$的节点作为根节点,将树无根转有根。 这题的突破口就是要求瞬间移动的次数最少。 次数最少,必然是一个叶子节点走到另一个叶子节点,然后瞬间移动一次,再从一个叶子节点走到另一个叶子节点,然后瞬间移动一次…… 因为叶子节点总数可能是奇数,可能是偶数,那么接下来要 阅读全文
posted @ 2016-08-22 16:45 Fighting_Heart 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 分治,$FFT$。 阅读全文
posted @ 2016-08-22 13:17 Fighting_Heart 阅读(143) 评论(0) 推荐(0) 编辑
摘要: $dp$,字典树。 $dp$递推式很容易知道。dp[i]=max{dp[j]+1} a[j]^..^a[i]<=X,并且$[j,i]$长度不能超过$L$。 但是暴力来复杂度极高,所以需要用字典树维护这个东西。将前缀异或和插入到字典树中,然后不断维护$a[i]$位置之前$L$个前缀异或和就好了。 跑了 阅读全文
posted @ 2016-08-20 10:17 Fighting_Heart 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 首先要计算出每一条路最早开始的那一天,然后最晚结束的那一天。 这些天之间这条边都必须$open$,然后就变成一个线段树区间$+val$的问题了,最后询问一个每个点的$val$是多少。 注意:数据中有$ai>bi$的情况。 阅读全文
posted @ 2016-08-19 18:37 Fighting_Heart 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 二分t+最大权闭合图。 很显然二分那个t作为limit。每一个limit下,有一些边不能用了,然后要知道这种情况下怎么选点获得的价值最大。 这么想:一个shop想获得收益,就必须选择某一些plant,问题就转化成了最大权闭合图。 阅读全文
posted @ 2016-08-19 18:35 Fighting_Heart 阅读(165) 评论(0) 推荐(0) 编辑
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 69 下一页