BZOJ做题纪录
一些没什么顺序的杂题
//17年6月8日以前的文章为倒序插入
Mima_Reincarnation
这个作者很懒,什么都没留下…
展开
-
BZOJ4384: [POI2015]Trzy wieże 记忆化搜索
http://www.lydsy.com/JudgeOnline/problem.php?id=4384 dp数组表示的是当前有两个数量相等,末尾字符是这两个中的一个且与它前面的字符不等,第三种的数量比这两个少1的情况。主要是基本相同的代码抄三遍所以看着比较长。。。时间复杂度o(n)。#include<cstdio>#include<algorithm>#define gm 1000005u原创 2017-06-28 21:16:47 · 1051 阅读 · 0 评论 -
BZOJ4381: [POI2015]Odwiedziny 分块 长链剖分
http://www.lydsy.com/JudgeOnline/problem.php?id=4381 若步长小于sqrt(n)则可以预处理每个点走某种步长走到跟的权值和然后减去LCA上面的部分;若步长大于sqrt(n)则暴力走,为了避免LCA算重,可以先防止两个点走到LCA,然后再特判能否走到LCA上。第一种情况要注意不要计算走过原创 2017-06-09 19:03:48 · 885 阅读 · 0 评论 -
BZOJ4866: [Ynoi2017]由乃的商场之旅 莫队
http://www.lydsy.com/JudgeOnline/problem.php?id=4866 询问一个字符串区间内有多少子区间重排后能形成回文串。由于字符集只有26,可以给每个字母分配一个2的幂次作为权值,则相当于询问区间异或和是否为2的幂次或0 直接很难维护,那么考虑莫队,维护一个桶记录当前区间内所有前缀的异或和,若在前端插入删除则打上全局标记,然后每次插入删除时枚举每个2的幂次原创 2017-06-08 20:21:37 · 983 阅读 · 0 评论 -
BZOJ4865: [Ynoi2017]由乃运椰子 分块
http://www.lydsy.com/JudgeOnline/problem.php?id=4865 写题面的人语死早。。。S为空的话也是要把元素插入进去的(要不然岂不是一直为空),然后每次异或的是上一次答案的相反数。。。还有莫名其妙的标点缺失和语句重复。。。 于是就是在问能拆分成最少多少个单调增的序列,显然就是众数个数,所以相当于查询区间众数。 传统做法就是分块,预处理每两块之间原创 2017-06-08 20:06:40 · 814 阅读 · 0 评论 -
BZOJ4012: [HNOI2015]开店 重链剖分 可持久化线段树
http://www.lydsy.com/JudgeOnline/problem.php?id=4012 两点间距离:深度之和-2×LCA深度 http://blog.csdn.net/mima_reincarnation/article/details/54024494 ORZ16年我就会的东西现在怎么忘没了。。。那题是离线排序做,那么对于这题用可持久化线段树来维护树链剖分就可以了。#inc原创 2017-06-08 19:53:25 · 956 阅读 · 0 评论 -
BZOJ4636 蒟蒻的数列 链表
题目描述DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知道N次操作后数列中所有元素的和。他还要玩其他游戏,所以这个问题留给你解决。INPUT:第一行一个整数N,然后有N行,每行三个正整数a、b、k。NOUTPUT:一个数,数列中所有元素的和 容易发现各操作之间无顺序性,因此将原创 2016-08-08 09:44:36 · 444 阅读 · 0 评论 -
BZOJ1010 玩具装箱toy
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。P教授有编号为1…N的N件玩具,第i件玩具经过 压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。同时如果一个一维容 器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,原创 2016-08-08 16:13:11 · 440 阅读 · 0 评论 -
BZOJ3224 普通平衡树
Description您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最大的数) 6. 求x的后继(后继定义为大于x,且最小的数)Input第一行为n,表示操作的个数,下面原创 2016-08-08 16:20:16 · 263 阅读 · 0 评论 -
BZOJ2157 旅游
DescriptionRay 乐忠于旅游,这次他来到了T 城。T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接。为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路径。换句话说, T 城中只有N − 1 座桥。Ray 发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray 经过这座原创 2016-08-08 16:26:28 · 429 阅读 · 0 评论 -
BZOJ3680 吊打XXX
Descriptiongty又虐了一场比赛,被虐的蒟蒻们决定吊打gty。gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了。蒟蒻们将 n个gty吊在n根绳子上,每根绳子穿过天台的一个洞。这n根绳子有一个公共的绳结x。吊好gty后蒟蒻们发现由于每个gty重力不同,绳 结x在移动。蒟蒻wangxz脑洞大开的决定计算出x最后停留处的坐标,由于他太弱了决定向你求助。 不计摩擦,不计能量原创 2016-08-08 16:34:50 · 470 阅读 · 0 评论 -
BZOJ3223 文艺平衡树
Description您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 Input第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n) m表示翻转操作次数 接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n Output输出一原创 2016-08-08 16:43:28 · 513 阅读 · 0 评论 -
BZOJ3668 起床困难综合症
Description21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间。正是由于 drd 的活动,起床困难综合症愈演愈烈,以惊人的速度在世界上传播。为了彻底原创 2016-08-08 16:49:41 · 419 阅读 · 0 评论 -
BZOJ3675 序列分隔
Description小H最近迷上了一个分隔序列的游戏。在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列); 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。 每次进行上述步骤之后,小H将原创 2016-08-08 16:58:18 · 365 阅读 · 0 评论 -
BZOJ2096 Pilots
DescriptionTz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值。耍畸形一个人是不行的,于是他找到了你。 Input输入:第一行两个有空格隔开的整数k(0<=k<=2000,000,000),n(1<=n<=3000,000),k代表Tz设定的最大值,n代表难度序列的长度。第二行为原创 2016-08-08 17:01:50 · 336 阅读 · 0 评论 -
BZOJ2216 Lightning Conductor 决策单调性
题目大意:给出序列a,对于每一个i,求出max{a[j]+sqrt(abs(i-j))}-a[i](n<=500000)决策单调性,对于j#include<cstdio>#include<cmath>#define gm 500001using namespace std;int f[gm];int stk[gm],top=0;int left[gm],right[gm];int n;原创 2016-08-12 12:03:43 · 389 阅读 · 0 评论 -
BZOJ1031 [JSOI2007]字符加密Cipher 后缀数组
题目大意:输入一个字符环,从每个位置开始沿正方向读字符个数个,得到的串排序,输出排序后每个串末尾字符构成的串。 后缀数组裸题。注意基排时不要把q[i]打成i,重标号时要考虑边界。 自己的代码(好像和常见写法没什么区别。。。)#include<cstdio>#include<cstring>#define gm 200001char s[gm];int sa[gm];void sort(原创 2016-12-26 20:44:35 · 349 阅读 · 0 评论 -
BZOJ1131 [POI2008]Sta 树DP
题目大意:给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 考虑一个点向其儿子转移对答案的影响。该子树内所有点深度-1,除该子树外的点深度+1,所以随便选一个根,预处理出深度和,然后全都转移一遍就可以。 自己的代码:#include<cstdio> #include<algorithm> #define gm 1000001 using namespace std原创 2016-12-26 21:01:54 · 471 阅读 · 0 评论 -
BZOJ3531 旅行 树链剖分
题目大意:给定一棵树,点染色,修改点权,链上询问点权和或者最大值 主要思想是对每种颜色开一颗线段树,动态分配内存,染色时删除原来的点,加入到新线段树中即可。 需要注意的是不仅插入要更新信息,删除也要更新信息。 自己的代码:#include<cstdio>#include<cstring>#define safe(x,a) (x?x->a:0)#define gm 100001using原创 2016-12-26 21:14:18 · 430 阅读 · 0 评论 -
BZOJ2081: [Poi2010]Beads 哈希
题目大意:给出一个串,求按每几个一组的分割方式可以得到最多的不同子串。正序倒序算一种,末尾有剩余的不算。 直接枚举每种分割方案,然后再对产生的哈希值做个哈希判重,总复杂度nlogn。 据说这题直接自然溢出就能过,我到底为什么写了个双取模而且还非要用pbds哈希表。。。时限10秒跑了9.388秒,差点就卡不过去了23333#include<cstdio>#include<ext/pb_ds/as原创 2016-12-27 07:43:46 · 643 阅读 · 0 评论 -
BZOJ2683: 简单题 kdtree
题目大意:n*n矩阵,单点加,矩形查和 1<=N<=500000,操作数不超过200000个,内存限制20M。 正解是cdq分治,强行拿kdtree卡了过去。 1.n是矩形大小,不是操作数量,不要被坑了 2.kdtree是空树直接返回0,否则就崩了 3.nth_element的写法是(begin,nth,end,comp),话说我之前那个崂山白花蛇草水错成那样都能过。。。 4.kdtre原创 2016-12-27 08:13:58 · 603 阅读 · 0 评论 -
BZOJ1176: [Balkan2007]Mokia kdtree
题目大意:同2683 修改操作数M <= 160000,询问数Q <= 10000 多了个初始值,查询时直接加上就好。#include<cstdio>#include<algorithm>#include<cmath>#define u size_tusing std::nth_element;bool cmp;struct pnt{ u pos[2]; pnt(u原创 2016-12-27 08:16:18 · 509 阅读 · 0 评论 -
BZOJ2179: FFT快速傅立叶 FFT
题目大意:给两个60000位以内的整数,求乘积 快速傅立叶变换入门题。原创 2016-12-27 08:52:09 · 572 阅读 · 1 评论 -
BZOJ2194: 快速傅立叶之二 FFT
题目大意:请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。 FFT中的常用技巧:把一个序列反向,就可以转化为卷积问题。 考虑到若令a[i]=a[n-1-i],对a与b做乘法,则c的第n-1项~第0项依次就是答案。 FFT精度问题迷得很,输出%.0lf就WA,加上0.5再flo原创 2016-12-27 09:44:29 · 397 阅读 · 0 评论 -
BZOJ3786: 星系探索 splay维护dfs序
题目大意:n个点的树,m个操作 1.询问到根权值和 2.改变父亲,保证不出环 3.子树加 n<=100000,m<=300000,要开long long toptree轻松虐,可惜我不会 因为本题的询问都是一个点到根的,根又不会变,因此可以通过维护入栈出栈序的方法,每个点入栈时向splay中push _ back一个正权值点,出栈时向splay中push _ back一个负权值点,这样从原创 2016-12-27 14:01:51 · 587 阅读 · 0 评论 -
BZOJ2553: [BeiJing2011]禁忌 AC自动机 期望DP 矩阵
题目大意:给出n个禁忌串,定义任意一个字符串的禁忌伤害是不相交的禁忌子串的最大个数,求长度为len的随机串禁忌伤害期望。 所有的串只包含前alphabet个拉丁字母。 N ≤ 5,len ≤109,1 ≤ alphabet ≤ 26。 对所有禁忌串建AC自动机,问题转化成:每次在AC自动机上走一步,走到危险节点(即有危险标记的节点或者能沿fail走到危险标记的节点)就自动回到根,求危险节点的期原创 2016-12-27 14:24:28 · 401 阅读 · 0 评论 -
BZOJ 3894&1497&1711&3438 网络流入门题
3894:矩形,每个点选文科一个得分,理科一个得分,一个点上下左右都和这个点选的一样会有额外得分。求最大得分。 最小割。把所有权值加上,s连每个点,每个点连t,流量均为得分。全选s的特殊得分建一个点,s连它,流量为得分,它连所有包含的点,流量无穷(意为这个关系不可割断)。全选t的同理。 这样所有矛盾关系都对应一条从s到t的通路,最小割即可。 注意dinic增广过程中把一个点设成-1的条件是分配原创 2016-12-27 15:17:16 · 386 阅读 · 0 评论 -
BZOJ1115: [POI2009]石子游戏Kam 博弈论
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。 每个点10组数据,每组1000堆,个数小于等于10000。 首先将石子差分,则移走石子变为将石子移到右边一堆。 结论:从最后一堆开始数,只有奇数堆是有用的,其异或和不为0则先手必胜。 这是因为对于每原创 2016-12-27 15:43:19 · 353 阅读 · 0 评论 -
BZOJ2440: [中山市选2011]完全平方数 二分 容斥原理
题目大意:对于每组数据,求第Ki 个不是完全平方数的正整数倍的数。组数50,K=10^9 首先二分答案,变为求1~n之间的不是完全平方数的正整数倍的数个数。 由容斥原理,答案为含有0个平方因子的数-含有1个平方因子的数+含有两个平方因子的数。。。 观察可知,对于p^2所有的倍数,其对答案的贡献与p的梦比优斯函数值一致。因此直接从1枚举到sqrt(n)即可,p^2在1~n内有n/(p^2)个倍数原创 2016-12-27 16:30:34 · 342 阅读 · 0 评论 -
BZOJ1013: [JSOI2008]球形空间产生器sphere 高斯消元
有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。 n<=10 列出n+1个点到圆心的距离表达式,其值都相等。于是用其中n个分别减去最后一个,由平方差公式即可得到n个线性方程,高斯消元求解即可。 高斯消元的做法: 1.枚举消到第几项 2.枚举第一原创 2016-12-27 17:00:06 · 400 阅读 · 0 评论 -
BZOJ4198: [Noi2015]荷马史诗 哈夫曼树
题目大意:k叉哈夫曼树,且要求最大深度最小 对于第一条,先将多余的部分也就是n%(k-1)个预先合并,注意如果n%(k-1)==1就不要合并了,n%(k-1)==0要合并k-1个。 最大深度最小,直接贪心即可。 std::priority_queue慢得吓人#include<cstdio>#include<queue>#define gm 100001using namespace st原创 2016-12-27 17:14:43 · 397 阅读 · 0 评论 -
BZOJ2321 [BeiJing2011集训]星器 能量守恒定律
给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作。 字符串最终长度 <= 600000,询问次数<= 10000,询问总长度<= 3000000 一个子串出现的次数等于后缀自动机的parent树(也就是反串的后缀树)上这个串对应的节点集合内元素的数量。由parent树原创 2017-01-01 11:07:25 · 570 阅读 · 0 评论 -
BZOJ3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
题目大意:N个节点的树,每个节点有一种颜色,问存在多少种颜色序列不同的路径。 1<=n<=100000,颜色种类<=10,叶子节点最多有10个 广义后缀自动机是把多个串建到同一个后缀自动机中,该自动机可以识别所有串的所有后缀。以一棵trie树为例,广义后缀自动机在分叉处保存当前的last指针,并在一条支路结束后将last指针调回分叉处保存的指针,然后再进入另一支路。 广义后缀自动机的构建要注意原创 2017-01-02 20:02:02 · 449 阅读 · 0 评论 -
BZOJ2938: [Poi2000]病毒 AC自动机
题目大意:给出一些01串,问是否存在一个无限长的串不包含这些串中的任意一个。 总长不超过30000。 建立AC自动机,则问题转化为在AC自动机上找环。考虑什么样的节点不能走。若一个节点是单词节点,那么所有fail指向它的节点一定包含了它作为后缀,所以这些节点都不能走。所以对于一个节点,如果它的fail节点危险,那么它也危险。所以不走危险节点,DFS查找是否有环即可。 由tarjan的过程类比,原创 2017-01-02 20:50:03 · 428 阅读 · 0 评论 -
BZOJ3674: 可持久化并查集加强版 rope
n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 请注意本题采用强制在线,所给的a,b,k均经过加密,加密方法为x = x xor lastans,lastans的初始值为0 0 < n,m <= 2*10^5 只要将数组可持久化即可,但如果使用rope,需要注意以原创 2017-01-03 15:06:45 · 444 阅读 · 0 评论 -
BZOJ2850: 巧克力王国 kdtree
题意:n个平面上的带权点,每次给出a,b,h,询问满足ax+by#include<cstdio>#include<algorithm>using std::nth_element;typedef long long ll;struct chok{ int p[2],v; chok(){} chok(int x,int y,int z):v(z){p[0]=x,p[1原创 2017-01-03 15:15:46 · 793 阅读 · 0 评论 -
BZOJ1941: [Sdoi2010]Hide and Seek kdtree
题目大意:给定n个点,求其中一个点使得到其它所有点中的最远距离和最近距离差值最小,距离定义为曼哈顿距离。 N<=500000,0<=X,Y<=10^8 用kdtree暴力枚举每一个点即可。注意算距离时不能算自己。 最远距离的估价为max(abs(x-xmin)、abs(x-xmax))+max(abs(y-ymin)、abs(y-ymax))。#include<cstdio>#include原创 2017-01-03 15:26:45 · 544 阅读 · 0 评论 -
BZOJ2648&2716 kdtree
题意:初始给定一些点,两种操作:1.询问一个点的最近点 2.加点 替罪羊kdtree即可,由于这题是我第一次写kdtree找最近点,查询写崩了,用读入优化卡时过的。。。 而且中途出现了很多问题: 1.树为空要返回0,要不就崩了 2.建树时记得更新size 3.初始50W个点,操作50W次,最多可能有100W个点 4.nth_element的比较函数我穿了个小于等于进去。。。无限RE#in原创 2017-01-03 15:44:10 · 572 阅读 · 0 评论 -
BZOJ3620: 似乎在梦中见过的样子 KMP
题意:给出一个小写字母字符串,求形如ABA(A的长度>=k)的子串个数。位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串。 n<=15000 , k<=100 暴力枚举左右端点就能过。 枚举每个左端点当做首字符进行KMP,对于一个右端点,沿着fail指针跳回去,经过的节点能满足”首字符到这个字符构成的前缀也是当前的后缀“。所以找到一个尽可能长的匹配前缀使得len*2+1原创 2017-01-03 15:52:38 · 523 阅读 · 0 评论 -
BZOJ3621: 我想那还真是令人高兴啊 复数运算
题意:给出一对三角形,已知其中一个是由另一个绕某一点旋转放缩而得到,求这个点的坐标。每个测试点有T(<=10)组数据。 一开始以为是计算几何,然而向量的旋转和放缩是两种操作,复数却可以一步完成。 对于复数a和b,a*b的几何意义为a与b长度相乘,极角相加。 那么本题就可以看成从旋转点出发,指向其中一个三角形顶点的三个复数向量乘以同一个复数后变成了从旋转点出发,指向另一个三角形顶点的三个复数向量原创 2017-01-03 16:23:56 · 321 阅读 · 0 评论 -
BZOJ3622: 已经没有什么好害怕的了 DP
题意:有N个糖果,N个药片,每个糖果和药片都有权值,求所有的两两配对方案中,糖 > 药的组数比药 >糖的组数多k组的方案数。n<=2000,保证所有权值不相同。 将问题转化为求糖 > 药的组数正好(n+k)/2组的方案数,若不是整数则显然为0。由于与顺序无关,所以可以先对两组数据排序。 接下来考虑如何设计状态。 排完序后,容易预处理出每一个糖果大于多少个药片(记为cnt[i])。设f[i][j原创 2017-01-03 17:12:55 · 406 阅读 · 0 评论