自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 洛谷P3674 小清新人渣的本愿 莫队+bitset

给定你一个n≤1e5n\leq1e5n≤1e5的数,以及m≤1e5m\leq1e5m≤1e5个询问,并且所有的数的值域都为[0,c][0,c][0,c],每次询问给出一个值xxx,然后有三种不同的询问,分别是是否区间存在两个数满足两数之差,和,积为xxx。考...

2019-08-31 21:52:02 118

原创 洛谷P2564 生日礼物 尺取法

给出n≤1e6n\leq1e6n≤1e6个彩珠,他们散落在不同的位置上,并且有k≤60k\leq60k≤60种类型。然后要求一段距离,这段距离要包含所有的不同类型的彩珠,并且长度是最短的。直接对所有的彩珠按照位置排序,然后注意到随着左端点的移动,右端点单调不减。所以考虑尺取法,同时记录下当前不同类型的个数,这个容易维护。#include<bits/stdc++.h>using n...

2019-08-31 19:15:08 241

原创 洛谷P2216 理想的正方形 单调队列

给出一个n×mn×mn×m的矩阵,现在要你从里面找出一个k×kk×kk×k的矩阵,使得这个矩阵的最大值减去最小值最大。n,m≤1e3n,m\leq1e3n,m≤1e3。如果只是一个序列,维护长度为kkk的区间的最大值减去最小值。直接用两个单调队列分别维护这个滑动窗口即可。那么要维护一个矩形k×nk×nk×n的矩形的最大值和最小值,我们可以把每个k×1k×1k×1的矩形压缩成一个点,最大值就是其中...

2019-08-31 19:10:51 112

原创 洛谷P2698 花盆Flowerpot 尺取法+单调队列

给出若干个雨滴,是二维平面上的坐标(x,y)(x,y)(x,y),然后你可以用一段长度连续的花盆去接它,条件是要使得雨滴落在花盆上的最晚时间减去最早时间超过ddd,让你求出花盆的最小宽度。注意到随着左端点的增加,右端点是单调不减的。所以考虑尺取所有的区间是O(n)O(n)O(n),剩下的问题就是判断区间最大值减去区间最小值是否超过ddd,这两个东西分别用两个单调队列维护。时间复杂度是O(n)O(...

2019-08-31 10:32:20 256

原创 洛谷P3128 最大流Max Flow 树上差分

给定一个n≤5e4n\leq5e4n≤5e4的树,已经m≤1e5m\leq1e5m≤1e5次操作,每次操作会选择两个点uuu和vvv,使得两点路径上所有的点都加111,求点权的最大值。直接暴力是O(nm)O(nm)O(nm)的,这里考虑差分最后再求前缀和。树上的差分分为点差分和边差分,这里是点差分。对u,vu,vu,v分别+1+1+1,...

2019-08-30 20:54:31 148

原创 BZOJ 3261 最大异或和 可持久化01字典树

给出一个序列长度n≤3e5n\leq3e5n≤3e5的数组,支持两个操作,1.在数组的末尾插入一个数。2.给定区间[l,r][l,r][l,r]和一个数xxx,查询这个区间里面使得(⊕i=pnai)⊕x(\oplus_{i=p}^{n}{a_{i}})\oplus x(⊕i=pn​ai​)⊕x最大的那个ppp。事实上⊕i=pnai=(⊕i=1p−1ai)⊕(⊕i=1nai)\oplus_{i=p...

2019-08-30 15:52:36 115

原创 BZOJ 4260 REBXOR 字符串 01字典树

给出n≤4e5n\leq4e5n≤4e5个数,然后求问两段区间的异或和相加的最大值是多少。如果只求一段区间的最大异或和,这是一个经典的问题。在01字典树上依次查询和插入把每个前缀由高位往低位插入。在此基础上我们只要维护前缀最大值和后缀最大值,最后更新答案就可以了。#include<bits/stdc++.h>using namespace std;typedef long l...

2019-08-30 12:25:16 144

原创 BZOJ 1935 园丁的烦恼 离线+树状数组

给出一个1e7×1e71e7×1e71e7×1e7的矩阵,然后有5e55e55e5个点和5e55e55e5次询问,每次询问都是问一个矩形里面有多少个点。直接把询问拆成四个前缀,然后按xxx排序,对所有的yyy离散化,对每个xxx用树状数组先加点再查询。最后O(1)O(1)O(1)回答询问。#include<bits/stdc++.h>using namespace std;ty...

2019-08-30 10:40:24 136

原创 BZOJ 2564 集合的面积 几何 闵科夫斯基求和

给出两个点集,然后求问来自己两个不同点集的点(x1,y1)(x_{1},y_{1})(x1​,y1​)和(x2,y2)(x_{2},y_{2})(x2​,y2​)构成的(x1+x2,y1+y2)(x_{1}+x_{2},y_{1}+y_{2})(x1​+x2​,y1​+y2​)所组成的凸包的面积的两倍。先对两个点集分别求凸包,然后双指针在凸包上扫描,每次假如更凸的那个边。先存一个板子,虽然好像...

2019-08-30 09:43:03 136

原创 UVA 11021 Tribles 概率dp

首先给出kkk个毛球,然后这些毛球的寿命都只有一天。并且他们会有pip_{i}pi​的概率生繁衍出iii个新的毛球。iii的范围是在111到nnn的,然后求问第mmm天的时候这些毛球全部死亡的概率是多少。kkk个毛球在mmm死亡的概率相等且独立。考虑111个毛球在mmm天死亡的概率是fmf_{m}fm​,kkk个毛球在第mmm天死亡的概率为(fm)k(f_{m})^k(fm​)k。fi=∑j=0...

2019-08-29 17:16:57 96

原创 BZOJ 4318 OSU! 概率dp

玩OSU!这个游戏,每次操作只有成功与失败,分别记为000或者111,然后得分为所有的最长111的长度的三次方之和。求得分的期望。记f[i]f[i]f[i]表示到第iii的期望得分。考虑每次增加对得分的贡献,那么fi=fi−1+pi(E((x+1)3)−E(x3))f_{i}=f_{i-1}+p_{i}(E((x+1)^3)-E(x^3))fi​=fi−1​+pi​(E((x+1)3)−E(x3...

2019-08-29 15:59:33 101

原创 BZOJ 1093 最大半连通子图 图论 缩点+拓扑排序

给出一个定义叫做半连通图,半连通图就是一张对于任意其中两点u,vu,vu,v,都存在某条有向路径u−&gt;vu-&gt;vu−>v或者v−&gt;uv-&gt;uv−>u,然后给出一个点诱导子图的定义。问你最大半连通子图有多少个点并且还要求出有多少种不同的选择方式。半连通的最大点数实际上就是缩点后的最长链,这个是一个经典问题。然后要求个数,这个思路...

2019-08-29 12:33:01 223

原创 BZOJ 2438 杀人游戏 图论 缩点

给出一个有向图,然后问你每次可以查证一个人,而这个人可能是平民,如果是平民他会告诉你所有他认识的人是什么身份。如果是杀手,你就被杀手杀了。只有一个杀手而且每个人是杀手的概率是等同的。问你在保证安全的情况下知道谁是杀手的最大概率。事实上,假设你选择了kkk个人,你被杀的概率为kn\frac{k}{n}nk​。因此你要选择最少人,假设一堆人在一个强连通分量里面那么你只要查证其中任意一个人。而缩点之后...

2019-08-28 21:32:41 160

原创 BZOJ 1179 ATM 图论 缩点+拓扑排序

给出一张图,图上每个点都有一个权值,然后有一些点是酒吧。给定一个起点,有一个抢劫犯从这里出发,最终停在某一个酒店。求问权值最大和是多少。...

2019-08-28 20:13:25 183

原创 BZOJ 1251 序列终结者 平衡树 无旋treap

因为感觉SplaySplaySplay比较难学。所以尝试去学了一下功能也同样强大的无旋TreapTreapTreap,但是并没有理解很透彻。无旋TreapTreapTreap主要只有两个操作:1.split:1.split:1.split: 把当前的树分割为两个平衡树。假设当前要取出前一个树的大小为kkk,比较左子树的大小和kkk,假如k≤sz[ls[rt]]k\leq sz[ls[rt]]k...

2019-08-28 16:33:50 118

原创 BZOJ 3143 [HNOI2013] 游走 期望dp+高斯消元

题意给出一个点为1−n1-n1−n,边为1−m1-m1−m的无向连通图,从111出发走到nnn停下来,走过一条边的时候要加上这条边的标号,然后要求你给所有的边重新标号,求最小的期望和。根据排序不等式,我们按照每条边的期望从大到小编从小到大的编号。假设这条边的两个端点分别是u,vu,vu,v,并且记从u出发的期望次数为E(u)E(u)E(u),这个点的度数为deg(u),deg(u),deg(u)...

2019-08-28 12:57:15 121

原创 BZOJ [清华集训2013] 模积和 数论 整除分块

求∑i=1n∑j=1m[i≠j](n%i)(m%i)\sum_{i=1}^{n}\sum_{j=1}^{m}[i≠j](n\%i)(m\%i)∑i=1n​∑j=1m​[i̸​=j](n%i)(m%i),其中n,m≤1e9n,m\leq1e9n,m≤1e9直接利用上一篇的数论分块的知识。对原来式子化简实际上只要求∑i=1n(n%i)∑i=1m(m%i)−∑i=1min(n,m)(n%i)(m%i...

2019-08-28 11:37:35 108

原创 洛谷P2261 [CQOI2017]余数求和 数论 整除分块

求∑i=1nk%i\sum_{i=1}^{n}k\%i∑i=1n​k%i,其中1≤n,k≤1e91\leq n,k \leq 1e91≤n,k≤1e9直接化简为∑i=1nk−i[ki]\sum_{i=1}^{n}k-i[\frac{k}{i}]∑i=1n​k−i[ik​],关键在于求∑i=1ni[ki]\sum_{i=1}^{n}i[\frac{k}{i}]∑i=1n​i[ik​]。而[ki][...

2019-08-27 21:32:46 135

原创 CodeForces - 660D 几何 暴力+map

感觉这类的题做多了还是有很明显的套路痕迹的。给你一个n≤2e3n\leq2e3n≤2e3个互不相同的点,然后求又多少个平行四边形。其实判定平行四边形的条件只需要两直线平行且相等。用一个map维护线段的斜率和长度。然后直接枚举所有的线段。注意同一个平行四边形会被两个不同的邻边算两次,答案要除2。时间复杂度O(n2logn)O(n^2logn)O(n2logn)#include<bits...

2019-08-27 18:27:34 155

原创 CodeForces - 772B 几何 点到直线的距离+思维

给出一个n≤1e3n\leq1e3n≤1e3的凸多边形,求问最大一个范围DDD,使得无论怎么移动凸多变形上的点,都不会使得有点重合或者破坏凸性。不会使得点重合只要考虑临近两点的距离的一半即可。而对于凸性就是点到最近直线的距离的一半,很好想。时间复杂度O(n)O(n)O(n)#include<bits/stdc++.h>using namespace std;typedef l...

2019-08-27 17:59:52 120

原创 CodeForces - 340B 几何 暴力

给出平面上4≤n ≤3004\leq n\ \leq3004≤n ≤300个点,然后要求取四个点构成多边形,并且面积最大。然后题目特别说明了不保证多边形是凸多边形。枚举四个点太慢,不妨把凸多边形分解为两个三角形,然后枚举多边形的对角线,再枚举所有的点用叉积判断点是否在直线的上方和下方并且更新答案。一个细节就是要保证算出来的是多边形,而不是存在三点或者四点共线的情形。时间复...

2019-08-27 14:13:33 146

原创 CodeForces - 183B 几何 暴力

给出nnn个横坐标从111到nnn,纵坐标为000的点,以及mmm个平面上的点,求从前面每个点任意角度作射线,问总共最多能覆盖到多少个点,点可以被重复覆盖。注意到mmm只有250250250,直接考虑暴力枚举所有可能的斜率,然后对于每个斜率枚举所有点判断点是否在这条直线上。然后再判断这条直线落在XXX轴是否是1−n1-n1−n的整点。如果是则更新这个点的答案。dd...

2019-08-26 16:15:15 150

原创 CodeForces - 166B 几何 判断多边形是否在凸包的内部

给你一个多边形,

2019-08-26 14:54:47 179

原创 洛谷P2742 圈奶牛 几何 凸包

给定平面若干个点,然后你可以在两两之间连边,求最短的边长和,要使得这些边把所有的点全部包围起来。显然凸包是可以做到包围所有的点的,然后显然两点之间线段最短,所以凸多边形是最优解。直接求出凸包,遍历一遍凸包求距离就可以了。...

2019-08-26 12:15:18 137

原创 CodeForces - 120J 几何 平面最近点对

题意给出n≤1e5n\leq1e5n≤1e5个向量,然后你可以对任意一个向量,实现四种对称操作,其实就是把(x,y)(x,y)(x,y)转化为(x,y),(x,−y),(−x,y),(−x,−y)(x,y),(x,-y),(-x,y),(-x,-y)(x,y),(x,−y),(−x,y),(−x,−y)四种状态。然后你从中选择两个向量使得操作之后的两个向量之和的模长最短。直接暴力枚举显然会超时。...

2019-08-26 11:13:14 223

原创 洛谷P1429 平面最近点对 几何 模板

给出平面上若干个点,求最近的两点之间的距离。直接暴力枚举两个点求最短的距离,时间复杂度是O(n2)O(n^2)O(n2)。这里尝试利用已经有的最短距离来实现剪枝优化:首先,对平面上所有的点按照横坐标排序,横坐标相等的按照纵坐标来排序。然后考虑中间这个点的位置,所有的点对分为两类,一类是全部在左边或者右边的区间,另外一类横跨中间的这个点。对于前一种类型,分治递归解决。并且我们取d=min(d1,...

2019-08-26 11:00:42 161

原创 CodeForces - 33D 几何 点与圆的关系+bitset暴力

给定平面上若干个两两不相交的圆,以及若干个点,每次询问给出两个点,求两个点之间需要经过多少个圆。注意到两个点之间若要经过某个圆,那么必定一个在圆内,另外一个在圆外。预处理每个点和每个圆的关系,用bitset[x][y]bitset[x][y]bitset[x][y]记录xxx这个点在yyy这个圆内。每次询问直接求出两个bitsetbitsetbitset异或后的1的个数即可。#include...

2019-08-25 16:43:45 189

原创 CodeForces - 24C 几何 思维

给出一个点M0M_{0}M0​,以及奇数个点A0,A1...An−1A_{0},A_{1}...A_{n-1}A0​,A1​...An−1​,生成新的一个点的方法是MiM_{i}Mi​是Mi−1M_{i-1}Mi−1​关于A(i−1)%nA_{(i-1)\%n}A(i−1)%n​的对称点,然后求第kkk个点的坐标。...

2019-08-25 16:01:19 100

原创 CodeForces - 14C 几何 模拟

给出四条线段,判断是否可以构成一个与水平轴平行的矩阵。先判断有四个且都出现两次的点,然后再判断是否各有两条和XY轴平行的线段。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const ll INF=LONG_LONG_MAX;const in...

2019-08-25 15:40:58 118

原创 BZOJ 2442 修剪草坪 dp+单调队列优化

记f[i]f[i]f[i]是到第iii头牛的最大值。f[i]=max(f[j−1]+∑x=j+1ia[i]) i−k≤j&lt;if[i]=max(f[j-1]+\sum_{x=j+1}^{i}a[i]) \space i-k\leq j &lt; if[i]=max(f[j−1]+∑x=j+1i​a[i]) i−k≤j<if[i]=max(f[j−1...

2019-08-25 14:18:22 108

原创 CODEVS 2598 编辑距离问题 线性dp

题意:给出两个字符串A与B,然后有3种操作,分别是添加一个字符,删除一个字符和修改一个字符,求最少操作多少次可能让A转化为B。这个题其实不难,考虑dp[i][j]dp[i][j]dp[i][j]为A串的前iii位转化为B串的前jjj位的最小代价。...

2019-08-25 11:32:47 108

原创 HDU 6705 path 乱搞/优先队列

kkk的最大范围为2e52e52e5,考虑离线然后O(1)O(1)O(1)回答询问。一开始将所有的有向边全部放入优先队列中,然后

2019-08-25 10:29:25 134

原创 HDU 6704 huntian oy 杜教筛

注意到a,ba,ba,b互质,而gcd(ia−ja,ib−jb)=igcd(a,b)−jgcd(a,b)=i−jgcd(i^a-j^a,i^b-j^b)=i^{gcd(a,b)}-j^{gcd(a,b)}=i-jgcd(ia−ja,ib−jb)=igcd(a,b)−jgcd(a,b)=i−j前面的一部分其实就是i−ji-ji−j,然后只要拆开就容易注意到∑i=1ni∑j=1i[gcd(i,j)=...

2019-08-25 10:14:37 162

原创 HDU 6703 array 权值线段树

先不考虑修改的情况,对所有的权值建一颗线段树,然后线段树上存储下标的信息,然后每个结点维护子树下标的最大值。然后对于每次查询,我直接查询区间[k,n+1][k,n+1][k,n+1]这段区间值大于r的最小的那个点。对于修改的情形,实际上每个节点被修改之后相当于删除,也就是说该节点是可选的,把该节点的下标置为无穷大就可以了。对于每次查询,先考虑查询左子树,如果左子树查询不到答案,再查询右子树,可...

2019-08-24 13:28:05 163

原创 HDU 6709 Fishing Master 贪心

首先假设我能够在炖鱼的时候把所有的鱼抓完,那么最少只需要k+∑i=1nt[i]k+\sum_{i=1}^{n}t[i]k+∑i=1n​t[i]的时间就可以完成。现在注意到可能在炖鱼的时候无法抓完所有的鱼,也就是∑i=1nt[i]k≤n−1\sum_{i=1}^{n}\frac{t[i]}{k}\leq n-1∑i=1n​kt[i]​≤n−1的情形,对于剩下来的一部分鱼,我可以在炖鱼的时候选择一段...

2019-08-24 09:21:52 218

原创 POJ 3734 Blocks 生成函数

这道题与上题不同在于是一个排列,对于没有个数限制的排列的生成函数是exe^{x}ex,而限制为偶数个则是ex+e−x2\frac{e^{x}+e^{-x}}{2}2ex+e−x​,化简之后得到答案为e4x+2e2x+14\frac{e^{4x}+2e^{2x}+1}{4}4e4x+2e2x+1​,拆开之后为4n+2n+14\frac{4^n+2^{n+1}}{4}44n+2n+1​,直接用快速幂去...

2019-08-22 20:08:04 138

原创 BZOJ 3028 食物 生成函数

生成函数的入门题,对所有的限制条件化简到最后就是x(1−x)4\frac{x}{(1-x)^4}(1−x)4x​,根据广义二项式定理可以化简为∑n=0∞Cn+33xn+1\sum_{n=0}^{\infty}C_{n+3}^{3}x^{n+1}∑n=0∞​Cn+33​xn+1,所以最终的答案就是Cn+23C_{n+2}^{3}Cn+23​,直接输出就可以了。代码就没必要放了。...

2019-08-22 19:44:06 111

原创 U41492 数颜色 树上启发式合并

树上启发式合并的经典问题。首先离线处理答案。用一个颜色数组记录某种颜色是否存在过,然后由于不同子树统计答案的时候互不影响,我们枚举子树的时候要清空之前的数组,但是这就带来了一个问题,我们无法向上合并答案了。启发式合并的做法是我们先考虑树剖预处理,然后对于统计一个结点的答案,先暴力递归所有轻儿子的答案不保留数组,然后递归重儿子并且保留数组,然后再次递归所有的轻儿子这次也保留数组,从而向上更新答案...

2019-08-22 16:58:32 114

原创 JSCPC I Neko and tree 树形dp+前缀和优化

题意是说给你一个数,然后上面有一些关键结点,统计多少种选择点集的方案,使得这个集合里面,任意两个结点的距离都小于等于k。我们考虑f[i][j]f[i][j]f[i][j]表示i这个子树中距离i的最大距离为j的总方案数。转移的时候通过枚举子树转移,对每一个新加入的子树的方案都要乘上原先的方案数,并且做完之后把现在的单独的贡献加进去。f[u][max(i,j+1)]+=f[u][i]∗f[v][j]...

2019-08-22 13:36:39 288

原创 JSCPC C Chika and Friendly Pairs 莫队+树状数组

题目大意是每次询问一个区间统计有多少对(ai,aj)满足|ai-aj|<=k。先考虑假设只有一个区间怎么做比较快,那么当然是转化为树状数组数点的问题了,考虑对于新加进来的点ai,对答案的贡献也就是数轴上[ai-k,ai+k]的点的个数,...

2019-08-22 09:33:51 168

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除