自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无尽

The road ahead will be long. Our climb will be steep.

  • 博客(30)
  • 收藏
  • 关注

原创 BZOJ 3473 字符串

广义后缀树+set子串问题就考虑后缀数据结构。考虑一棵后缀树,一个树上的串合法,当且仅当这个串在至少k个串的后缀树链的并上。那就用SAM做出后缀树,用set维护一个点的链并,即哪些串经过了这个点。然后枚举每一个串跑SAM,对于一个位置i,暴力跳fail直到链并不小于k为止。广义SAM和单串SAM的差别就是刚开始extend的时候要判断是否有一个状态已经包含了当前要增加的状态并且判断这个状态的len和

2017-03-29 22:08:17 461

原创 BZOJ 4032 [HEOI2015]最短不公共子串

后缀自动机+序列自动机(1)枚举A的子串,在B的SAM上跑一下看是不是B的子串即可。O(n2)O(n^2)(2)枚举A的子串,在B的序列自动机上跑一下看是不是B的子序列即可。O(n2)O(n^2)(3)对于一个答案序列s[l…r],一定有s[l…r-1]和s[l+1…r]都是B的子串。考虑枚举B的子串并同时在B的SAM上跑,再枚举下一个字母,如果这新串不是B的子串,即B的SAM上无转移,且是A的子序

2017-03-28 21:54:26 492

原创 BZOJ 2553 [BeiJing2011]禁忌

AC自动机+矩阵快速幂刚开始是想记f表示走到这的概率,g表示走到这的期望答案。写了一下狂WA不止,估计是计算量太大掉精度了?然后发现g实际上没有什么用。#include<cstdio>#include<cstring>#define S 28#define L 20#define N 150using namespace std;namespace runzhe2000{ ty

2017-03-27 15:45:03 360

原创 UOJ 228 基础数据结构练习题

线段树 多写点骗点访问量 加法好说,开平方就很气了,因为开平方的信息不能合并。这样就导致常规的线段树,分块之类的维护数列和的方法不能用。我们只能另辟蹊径,找寻性质。我们发现开平方操作会让数字减少得很快,大概六七次就能把一个数变成1。这给我一种在不特意构造数据的情况下,最终数字很容易变得大部分都一样的感觉。如果没有加法,那只要判断一下区间里有没有非1的,有就暴力做,这样复杂度没问题。考虑有加法,加法会

2017-03-25 17:54:04 1489

原创 BZOJ 4542 [Hnoi2016]大数

莫队记sumsum是前缀和,一对合法的i,ji,j必定满足(sumi−sumj−1∗10i−j+1) mod p=0(sum_i - sum_{j-1} * 10^{i-j+1}) \ mod \ p = 0移项一下,把10的幂分给两边,sumi10i≡sumj−110j−1 mod p \frac {sum_i}{10^i} \equiv \frac{sum_{j-1}}{10^{j-1}} \

2017-03-25 00:18:15 298

原创 BZOJ 4537 [Hnoi2016]最小公倍数

暴力的做法是把所有两维边权不大于询问的边用并查集做一下,查询两点是否连通以及连通块内有没有询问的值。 这是二维关系,显然我们会想到对第一维排序,动态地维护第二维。如果每一次都重建一下是不科学的,我们要维护图的连通性或者减少重建。二维关系不资磁线段树分治,所以不太好维护图的连通性,考虑减少重建次数,那就分块重建……把边分成根号块,每一次处理第一维在块内的询问。对于块前的边按第二维单调扫,块内暴力查。

2017-03-25 00:13:56 361

原创 BZOJ 4010 [HNOI2015]菜肴制作

拓扑排序正着贪心字典序最小肯定错。那我们要让小的尽量前,考虑找到一个反着的字典序最大的序列。 网上很少有证明,这里存一下证明。 反着拓扑排序时,如果有一次没有选择最大的那一个,则设当时最大的是A,选的是a,(A>a)。则假设最终序列为(S1)A(S2)a(S3),那么显然可以把A放到a后面,变成(S1)(S2)aA(S3),使得答案更优。/***************************

2017-03-25 00:03:37 471

原创 BZOJ 4035 [HAOI2015]数组游戏

BZOJ 4035这种题脑补不出来就把SG函数表打出来吧…… 其实我是打表才发现:若a^b=c,则f[a]^f[b]=f[c] 的,然后好像就能乱搞了……其他的我就什么都不说,这是最吼的。orz题解:http://blog.csdn.net/lych_cys/article/details/50896005#include<iostream> #include<cstdio> #inclu

2017-03-25 00:00:46 1044

原创 BZOJ 4036 [HAOI2015]按位或

快速莫比乌斯变换关于集合幂级数的更多内容请看2015年集训队论文最后一篇VFK的。orz orz主要思路就是把求一个集合幂级数的卷积转化成一个求子集和的问题。过程是作出莫比乌斯变换,变成求和,再快速莫比乌斯反演回去。记 fi(s)f_i(s) 为 ii 次过后,并集为 ss 的概率。记 h(s)h(s) 表示最终并集为 ss 的期望次数,记U=2n−1 U = 2^n-1那我们要求的就是 h(U)=

2017-03-24 23:52:56 912

原创 BZOJ 3594 [Scoi2014]方伯伯的玉米田

DP+二维树状数组显然一次操作[l,r]不优于操作[l,n],然后就可以DP。方程是一个三维前缀最大值,套上二维树状数组即可。 发生了一些奇怪的事,我这么傻比,有救吗? #include<cstdio>#include<cstring>#define N 10005#define K 505#define A 5555#define lowbit(_i) (_i&-_i)#define cma

2017-03-19 13:58:45 415

原创 BZOJ 3597 [Scoi2014]方伯伯运椰子

01分数规划+判负环看到分数就直接上分数规划嘛……瞎推一下式子就行了。大半夜做题好困啊,把from打成flow差点没看出来……感觉身体被掏空,明天早上还有训练,赶快睡觉,就不写具体的题解了。滚去睡觉2333#include<cstdio> #include<cstring>#define N 10005using namespace std;namespace runzhe2000{

2017-03-19 00:32:30 392

原创 51Nod 1542 羊圈偷袭

分块考虑到这个问题太具有一般性,没什么性质能搞。分块处理询问即可,大b直接跑,小b预处理。然后会被卡常数,加上输入优化,调整一下块大小即可。#include<cstdio>#include<algorithm>#define N 300005#define S 250using namespace std;namespace runzhe2000{ int read()

2017-03-18 16:21:11 397

原创 51Nod 1831 小C的游戏

博弈论+打表首先吐槽一下题面,【把这个石子堆分成等量的几份并只取其中一份】是说只留下其中一份而不是去掉其中一份!被坑很久,所以题目描述可以不那么随便吗…?然后xjb打表,质数基本都是败,合数基本都是胜,但有一些例外。题解是这么说的: 最简单的做法就是找规律了,直接搜一下就能获得所有的胜负态。 仔细观察可以发现质数除了2和17就是败的,合数除了16,34和289都是赢的。 感觉这样是不

2017-03-18 14:29:27 733

原创 SPOJ 4060 A game with probability

概率DP刚开始想简单了233……以为一个石子的时候都主动取,多余一个石子的时候都主动不取……感觉对博弈一无所知正确姿势:记f[i]表示剩i个石子,先手胜概率,g[i],后手胜概率。事实上,有i个石子时的决策只跟f[i-1]和g[i-1]的大小有关。如果前者大,那双方都希望自己在下一轮充当先手,否则希望充当后手。根据这个来DP就行了。事后打表发现取和不取的决策和当前石子的奇偶有关,interestin

2017-03-18 12:21:35 404

原创 BZOJ 4771 七彩树

主席树如果没有深度限制的话,显然有一种维护方式:对于每一种点,给自己+1,给同一颜色的前驱和自己的LCA-1,给同一颜色的后继和自己的LCA-1,然后查子树和。加了深度限制就坑爹了。直接用dfs序维护不了,因为询问区间不连续。考虑每一个询问,我们只希望所有深度不超过dep[x]+d的点有贡献,希望上述的维护只针对前几层的点。因此我们考虑按层来预处理信息。然后用一个能资瓷加和查的数据结构。得到算法:对

2017-03-16 21:42:29 671

原创 BZOJ 1497 [NOI2006]最大获利

最大权闭合图关于最大权闭合图的那套理论,去看胡伯涛论文《最小割模型在信息学竞赛中的应用》吧,orz学长。顺便做点笔记:最大权闭合图解决这样一类问题:如果选了一个点, 则这个点所有可达的点都必须选,求最大点权和。最大权闭合图的建图流程:1.增加源s汇t 2.源s连接原图的正权点,容量为相应点权 3.原图的负权点连接汇t,容量为相应点权的相反数 4.原图边的容量为正无限. 最终答案就是:正点权和

2017-03-16 12:58:08 592

原创 BZOJ 2989 数列

CDQ分治+树状数组注意到这题修改操作对询问的贡献独立,且修改之间互不影响,考虑CDQ分治。用左边的修改更新右边,只需按x排序所有事件点,树状数组维护y轴即可。 不知道KD树能不能搞一搞? #include<cstdio>#include<algorithm>#define lowbit(_i) (_i&-_i)#define N 800005#define BASE 400005usin

2017-03-16 08:00:13 507

原创 BZOJ 4012 [HNOI2015]开店

动态点分治+二分来摸一摸动态点分治……和普通点分治的区别就是要记下分治结构以及一些信息……首先,区间询问转成前缀询问。 对于一个点i,点分治结构里存i的点分治区域内所有点到i的距离信息,还有区域内所有点到i的父重心(的进入这个区域的第一个点)的距离信息,都按a排序好。 对于一个询问u点,对于u的分治区域里统计前者。对于u的每一个父重心,加上前者,减去下一层的后者即可。这样每一答案都会在路径上的最

2017-03-13 19:57:03 400

原创 BZOJ 4207 Can

分治+爆搜仔细想想,如果给我一个很长的区间,问我这个区间是不是极好的,我好像都不太会。。。那就考虑乱搞吧如果数据随机的话,一个直观的感觉是合法长度很短。考虑爆搜,我们需要提高爆搜的速度,肯定是要让它较快找到最长的解。一个有效的方法是从中间向两边搜,因为如果答案很长则很容易找到最优解,然后最优性剪枝就可以飞起来。这样递归往两边分治,能够较快找到最长答案。相反,如果答案很短,那每一次爆搜的长度就很短。到

2017-03-11 23:14:34 431

原创 51Nod 1789 跑的比谁都快

树形DP+决策单调性考虑优化DP。 构一条链的数据,打表,发现决策点单调,因此套决策单调性即可O(nlogn)O(nlogn)。知识漏洞,以前对决策单调性的理解一直存在误区。决策单调性是指对于 i < j,那么一定有i的决策点<=j的决策点,但并不保证决策函数是单峰的。因此不能直接从上一个决策点开始枚举,遇到不优就停下来。正确做法是主动转移,然后二分。详见《1D/1D 动态规划优化初步》里面的第一

2017-03-11 18:10:22 763

原创 51Nod 1712 区间求和

推式子是的,努力推式子即可。记需要统计答案的区间的头尾值为v,主要思想就是分不同的v来考虑。枚举v的所有区间下的最小间隔的区间,考虑区间内的数在v的所有跨过这个区间的大区间的贡献即可。注意中间端点的答案会被统计两次,需要减掉……(刚开始没注意到这一点然后WA飞啦)#include<cstdio>#include<cstring>#define N 1000005 #define uint un

2017-03-11 00:38:59 427

原创 BZOJ 2017省队十连测推广赛1

A 4765 : 分块 B 4766 : 矩阵树定理或找规律 C 4767 : 容斥+DP感觉难度应该是A>B>C? 可惜周二晚上在训练,不然也许就能全A了……A 4765 普通计算姬分块分块再分块…… 想了一想感觉没什么树上的算法能用,考虑分块乱搞。把操作分根号块,每次进入新块时重建一整棵树。那么一次询问至多只会对应根号个修改。对于每一个点x,记录从x到根的路径上经过了1~n的哪些点,这同

2017-03-08 09:32:56 661

原创 BZOJ 2118 墨墨的等式

模意义下最短路挂题解 http://blog.csdn.net/PoPoQQQ/article/details/46605701#include<cstdio>#include<cstring>#include<queue>#include<algorithm>#define N 500005#define M 14using namespace std;namespace runz

2017-03-06 17:17:34 310

原创 BZOJ 2303 [Apio2011]方格染色

易或方程+带权并查集我好SB啊,挂题解吧。。。。。。 http://www.cnblogs.com/HHshy/p/5840018.html#include<cstdio>#include<cstring>#define N 2333333#define MOD 1000000000#define R registerusing namespace std;namespace runz

2017-03-06 17:15:31 420

原创 UOJ 267 [清华集训2016]魔法小程序

前缀和非常认真地观察代码之后我们会发现实际上这是一个多维前缀和问题,c就记录前缀和。考虑前缀和的逆操作,即可复原出原数组。#include<cstdio>#define R register#define N 1000005using namespace std;namespace runzhe2000THU{ typedef long long ll; inline ll

2017-03-06 17:13:36 877 1

原创 51Nod 算法马拉松22 代码能力捉急记

A : 贪心+栈 B : 期望 C : Unfinished D : trie树 E : 平衡树+启发式合并 F : Unfinished考场上只脑补出了ABDE,然而只写出了ABD。 E题从周日晚上18:30懵逼地写到22:20没调出来就弃疗了,平衡树启发式合并写太不熟练了。结果第二天早上半个多小时就调出来了?早知道周日就早点去写了……(都怪作业太多) 因此排名很低,说多了都是泪

2017-03-06 08:05:11 496 1

原创 51Nod 1677 treecnt

容斥按照套路,按边考虑。一条边能贡献的答案是选的k个点分居两侧的方案数。发现这东西很难求。于是转成容斥求k个点归于一侧的方案数。#include<cstdio>#define N 100005#define MOD 1000000007using namespace std;namespace runzhe2000{ typedef long long ll; int fa

2017-03-03 15:46:39 235

原创 51Nod 1737 配对

这种贡献在边上的题的套路就是按边考虑。对于一条边,它的贡献一定不超过它两端子树的大小的较小值。开一个脑洞就会发现我们确实可以构造出这样一个方案。以重心为根,使每一条路径都经过重心即可。由于每一个子树的大小不超过n/2,所以这是一定能构造出来的。#include<cstdio>#include<algorithm>#define N 100005using namespace std;name

2017-03-03 14:57:11 383

原创 UOJ 67 新年的毒瘤

割点非割点且度数=m-n+2的就是答案。割点竟然没一次写对,智商已降低。设根为1。对于非1节点,一定有父亲的边,则它是割点的充要条件是存在一个儿子的low>=自己的dfn。对于1节点,它是割点的充要条件是有至少两个儿子。MD,对于非1节点忘记判断 x != 1了#include<cstdio>#define R register #define N 100005#define cmin(u,v

2017-03-02 11:14:41 402

原创 BZOJ 3711 [PA2014]Druzyny

DP+分治+线段树似乎有另一种O(nlogn)O(nlogn)的做法,就不详细说了。说一种O(nlog2n)​O(nlog^2n)​的做法。考虑分治,对于区间[l,r][l,r],用[l,mid][l,mid]来贡献[mid+1,r][mid+1,r]。 对于一组贡献,设j∈[l,mid],i∈[mid+1,r]j \in [l,mid], i \in [mid+1,r]。 jj 能贡献给ii

2017-03-02 07:37:49 630

空空如也

空空如也

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

TA关注的人

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