自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lych的博客

nothing

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

原创 bzoj 4236: JOIOJI 排序&扫描

首先令sJ[i],sO[i],sI[i]分别表示1~i位中'J','O','I'的个数,那么某一个子串i~j中'J','O','I'的个数相同的条件为:       sJ[j]-sJ[i-1]=sO[j]-sO[i-1]=sI[j]-sI[i-1]       然后上式等号三边(。。理解就好>_sJ[j]-sJ[i-1],得到:       0=sO[j]-sJ[j]-(sO[i-1]

2016-03-18 15:30:03 1187

原创 bzoj 2303: [Apio2011]方格染色 并查集

根据题目的条件可以列出方程为a[i][j]^a[i][j+1]^a[i+1][j]^a[i+1][j+1]=1,其中a[i][j]为1表示第(i,j)格染成红色。令这个式子为S(i,j),那么对于某一格(i,j),我们把S(1,1)...S(i-1,j-1)(也就是(i,j)左上的部分)异或以来,得到:       a[1][1]^a[i][1]^a[1][j]^a[i][j]=1(i,j都为

2016-03-18 15:22:29 1248

原创 bzoj 4245: [ONTAK2015]OR-XOR 递推

显然我们可以贪心从高到低分析,如果高位能不取就不取,这样得到的一定是最优解。       令s[i]=s[i-1]^a[i],那么对于某一段(x,y)的Xor值结尾s[x-1]^s[y]。考虑第k位能不能取,显然需要s[n]的第k位=0,另外需要有不少于m个“可取”的s[]的值为0,这样可以在这些s[]的位置处划分使得第k位为0。那么如果第k位可以为0,就要把所有s[]中第k位为1的那些都标记

2016-03-18 15:04:50 503

原创 bzoj 1190: [HNOI2007]梦幻岛宝珠 动态规划

根据题意,很明显需要把a*2^b中b相同的先分成一组,然后首先得到这一组中的答案。       然后如果令f[m]表示当重量为m时的最大值,那么考虑将第k组加入其中,由于第k组的重量一定AC代码如下:#include#include#include#define N 1105using namespace std;int n,m,len,a[105][N],b[105][N

2016-03-17 16:22:00 1882 1

原创 bzoj: 3157 bzoj: 3516 bzoj: 4126 国王奇遇记 线性插值法

题解可以戳这个,然后建议去看一下杜教ppt。       大概就是已知若干个点值,然后可以用组合的性质用自己把自己带进去然后O(M)得到任意一个点值把。(M为多项式的次数),组合数还是很神奇的。AC代码如下:#include#include#include#define ll long long#define N 500005#define mod 1000000007us

2016-03-17 07:52:38 1625

原创 bzoj 3224: Tyvj 1728 普通平衡树 Treap

平衡树的基本操作(←现在才会的SB)。直接裸上Treap即可,(不要问我为什么这么像黄学长的,因为我的数据结构都是按他的模板来的)。AC代码如下:#include#include#include#define N 100005using namespace std;int n,trtot,rt,ans,c[N][2],sz[N],sum[N],rd[N],val[N];int

2016-03-16 11:03:57 429

原创 bzoj 2154: Crash的数字表格 数论

首先得到朴素递推式,然后运用莫比乌斯反演得到:       然后可以发现后面的值之和N/d和M/d有关,只有O(N^0.5)种;而后面的值同样可以分段O(N^0.5)解决,因此时间复杂度O(N)。AC代码如下:#include#include#define ll long long#define mod 20101009#define N 10000005using name

2016-03-16 09:36:10 389

原创 bzoj 4037: [HAOI2015]Str 矩阵乘法&动态规划

这道题目确实是一道好题啊。。(据ydc说还是抄ZJ的题?)       首先根据定义推出f()的递推式:f(i)=Σ(j=1,m)f(i-j),考虑到m       然后来关注g()数组,如果用dp[i]表示g()的前i位构成的数字的答案(注意是一个矩阵),那么可以得到递推是dp[i]=Σdp[j]*w(g(j+1,i)),其中g(i,j)表示g()的第i-j位构成的数组,w(x)表示数字

2016-03-16 08:38:09 1167

原创 bzoj 4036: [HAOI2015]Set 子集和变换

AC代码如下:#include#include#define eps 1e-10#define N 1100005using namespace std;int n,m,op[N]; double a[N];int main(){ scanf("%d",&n); m=1<<n; int i,k; op[0]=(n&1)?1:-1; scanf("%lf",&a[0]); f

2016-03-15 18:55:48 1829

原创 bzoj 4035: [HAOI2015]T3 SG函数

博弈论神题。。       首先把问题转化为存在若干白点,然后将所有点翻转成黑点,先全部翻转的为胜。这和原题是等价的,因为如果某一步选一个黑点翻是必胜策略,那么下一步对手可以选择翻同一个点而使局面变回来,因此考虑双方都是采取最好的策略因此不会有一方翻黑点。       那么就把每一个白点看成是一个子游戏,最后将SG函数全部异或起来即可,由SG定理可知有:       SG(i)=mex

2016-03-15 14:17:08 2147

原创 bzoj 1103: [POI2007]大都市meg 树状数组

一句话题意:将边权修改为0(初始为1)和查询某个点到1的距离。       一开始预处理没有问题吧,然后修改边权只对它管辖的子树有影响。相当于区间修改。然后查分一下用树状数组即可。AC代码如下:#include#include#include#define N 250005using namespace std;int n,m,tot,dfsclk,c[N],bg[N],e

2016-03-15 07:26:05 1345

原创 bzoj 3192: [JLOI2013]删除物品 树状数组

由于m=2就变成了水题一道。。。(整天水题刷刷没救了)       可以把两个栈变成一个数组,然后就变成了每次从当前最大的移动到第二大的,统计路径上还有多少个点累加入答案,然后把最大的删除。直接排序后用树状数组维护前缀和即可。AC代码如下:#include#include#include#include#include#include#define ll long long

2016-03-14 19:20:23 574

原创 bzoj4034 T2 树链剖分&树状数组

一种明显的做法是直接树链剖分然后用区间修改区间查询树状数组(我写的这种)或者线段树来维护吧。。这样做是O(Nlog^2N)的。       但是还可以做到O(NlogN)。首先可以发现它是单点链上查询,那么可以考虑用差分的思想,或者考虑将单点修改直接变成区间修改然后就只用单点简单查询了。       首先考虑单点修改,这种操作只对它所在的子树中的所有点的答案有影响,也就是所在的子树中每一个

2016-03-14 19:17:23 851

原创 bzoj4033 T1 树形dp

一道比较考思维的树形dp。       如果直接定义f[i][j]为i所在子树中取j个黑色的最大值的话是没办法转移的吧。。因此我们不妨考虑一条边带来的影响。如果令f[i][j]为i所在子树中取j个黑色时,i所在子树中边的影响总和最大的值,就很方便转移了。所谓边的影响,是指:       如果有一条边(x,y),显然这条边将一棵树分成了两块,那么如果一边有a个黑点,b个白点;另一边有c个黑点

2016-03-14 15:59:40 553

原创 bzoj2300 防守战线 平衡树

我们发现只要倒着操作就可以把删除变成插入了,然后就可以用平衡树维护动态凸包了。(←set水掉的sb)AC代码如下:#include#include#include#include#include#define N 300005#define sqr(x) (x)*(x)using namespace std;struct node{ int x,y; }a[N],c[N]

2016-03-14 11:17:33 356

原创 bzoj2126 排斥反应 矩阵乘法

发现p很小而q很大。。矩阵乘法这么明显的提示。       不过转化还是很巧妙的。将所有的数变成p行q列的矩阵,然后就变成求从中取出一些点使得没有点相邻(包括同一行的最前面和最后面也算相邻)。       首先可以得到某一列没有相邻的状态(当p=10时有123种),然后就可以用矩阵乘法加速得到第一行转移到最后一行的方案数辣!!然后得到ans。AC代码如下:#include#inc

2016-03-13 20:49:42 839

原创 bzoj3924 幻想乡战略游戏 树链剖分&分治树

(对于和我一样没有权限的穷孩子,可以点这里提交)       一句话题意:维护带修改的带权重心到其余点的带权距离和。       首先看怎么求出带权重心。假设现在考虑一个点x,我们维护一个值f[x]表示x所在子树所有节点的权值和。那么如果存在一个点y,y是x的一个子节点,使得f[y]*2>树种所有点的权值和(显然反证易得这样的y只有一个),那么y一定比x更优;反之x比y更优。

2016-03-13 17:19:27 2096

原创 bzoj2127 happiness 最小割

看到这种题目,一般就是想到构建网络流,然后一种割对应一种方案(本题中为割完后S和选文科的相连,T和选理科的项链),求最小割把。。       考虑一个点x(代表一个同学),如果选文科,就要和T割断(理科割S),割断的为损失的部分,即选理科的喜悦值,因此连边x->T,容量为选理科的喜悦值;同理连边S->x,容量为选文科的喜悦值。       然后考虑两个相邻的点x,y,不同的方案对答案产生的

2016-03-11 10:13:48 1491

原创 bzoj1875 HH去散步 矩阵乘法

这道题目题意真是。。。讲两个可能产生歧义的地方:       1.重边算不同的方案,而且可以沿一条路走过去再沿重边回来;       2.可以到达终点以后再绕一个圈子;可以回到曾经到过的点;       那么看到不能沿重复的路回来,因此可以以边为状态构造转移矩阵。然后就没有然后了。。 AC代码如下:#include#include#define mod 45989#def

2016-03-11 08:08:02 555

原创 bzoj2733 永无乡 线段树合并

这道题是一道经典的平衡树+启发式合并吧。那么考虑用可持久化线段树来写。       对每一个节点保存一棵线段树表示所在块的编号的集合(因此可以一个块值保存一棵树),然后合并的时候就地柜合并左子节点和右子节点,然后更新节点的值即可。显然这样和启发式合并时等价的。因此为O(Nlog^2N),只是空间大了一点为O(NlogN),平衡树O(N)。AC代码如下:#include#include

2016-03-10 21:32:27 1898

原创 bzoj2134 单选错位 递推

由于一题只会对下一题产生影响且相互独立,可以考虑求出一道有a个选项的题写到有b个选项的题时的期望得分。       如果a>b,那么有b/a的概率选项在1...b之间,这是又有1/b的概率正确,因此期望为1/a;否则可以类似得到期望为1/b。因此期望就是1/max(a,b)。       然后就是10行题了23333。(不算头文件)AC代码如下:#include#include

2016-03-10 20:00:41 943

原创 bzoj3110 K大数查询 整体二分&树状数组

本来想用树状数组套树状数组取做的。然后发现树状数组还要动态开点。。就放弃了。然后扒了扒题解发现有整体二分啊。就自己脑补了一下。       首先,由于数有负的,但是绝对值       然后用一个装来(l,r,{S}),表示查询的答案在(l,r)中,或者修改的数的大小在(l,r)中的操作的集合为{S}。那么令mid=(l+r)/2,然后就可以通过只执行修改的数在(l,mid)中的修改操作,来

2016-03-10 19:35:13 1407

原创 bzoj3052&uoj58 糖果公园 带修树上莫队

bzoj上面的莫队除了小Z的袜子都是权限题啊/(ㄒoㄒ)/~~(欺负我们穷孩子),不过好在uoj上还有这么一道最经典的带修树上莫队,那就可以顺便把两个一起学辣~\(≧▽≦)/~       首先讲一下树上莫队,寒假的时候lbn在学校里面讲过,好像和vfk的不太一样??感觉还是lbn的简单一点。       考虑一个括号序列,向下一层为'(',向上回溯为')',那么考虑任意两点之间的路径就是

2016-03-10 13:48:31 1726 3

原创 bzoj2428 均分数据 爬山算法or模拟退火

爬山法和模拟退火的本质是差不多的,在本题中就是得到一个初解后,随机一个数改变到哪一组(组别在步长较大的时候选择和最小的,步长较小的时候随机选择)中,然后比较是否更优,更优就跳过去;如果不更优,则模拟退火算法有一定概率接受。       注意由于模拟退火有一定概率接受,因此(很)可能得不到最好的结果,可以把步长定的小一点然后多跑几遍;爬山算法则不同,一定每次都是局部最优解,可以把步长定的大点,这

2016-03-10 08:37:36 1921

原创 bzoj3680 吊打XXX 爬山算法

本来是打算写一个模拟退火的。但是发现这道题目一开始步长定得太长就可能会调到一个比较偏的点然后就回不来了。。。。索性直接写爬山。AC代码如下:#include#include#include#include#define N 10005using namespace std;int n; double ans,ansx,ansy,x[N],y[N],z[N];double d

2016-03-09 22:00:36 752

原创 bzoj3160 万径人踪灭 FFT+manacher

一道挺不错的题目。关键是想到卷积(相信大神看到这就会做了,不对,大神还需要来看我的博客吗)。       首先我们可以求出所有的回文子序列,然后减去回文子串的数量,就可以得到答案了。回文子串的数量可以用manacher算法O(N)得到,那么就看怎么得到回文子序列了。       不妨来看以一个点i为中心有多少回文子序列(以夹缝为中心的回文子序列同理)。我们发现关键是统计有多少个k,满足ch

2016-03-09 20:20:56 411

原创 bzoj3527 力 fft

bzoj上面没有题面,这里给一个吧。       题面:样例输入输出:       将要求的Ei转化一下变成       然后令得到:       注意到等号左边是一个卷积的形式(什么是卷积?可以看成是多项式乘法),然后发现右边只需要把f数组反一下就变成就卷积的形式了,具体的:       因此左右两边都化成了卷积的形式,就可以做两边多项式乘法来得到结果了。用fft加速

2016-03-09 16:43:43 635

原创 bzoj4417 超级跳马 矩阵乘法

一道不算太裸的矩阵乘法。       考虑对奇数和偶数分开来计算,令dp1[i][j]表示到第2i-1列在第j行的方案,dp2[i][j]表示到第2i列第j行的方案,那么显然有dp1[i][j]=Σdp2[1..i-1][j],dp2类似。考虑做一个令f[i][j]为dp[1..i][j]的前缀和,那么就有f1[i][j]=f1[i-1][j]+f2[i][j],f2[i][j]=f2[i-1

2016-03-09 10:14:41 1356

原创 bzoj4006 管道连接 斯坦纳森林 子集Dp

这道题目的要求比较高,它只需要相同频道的连在一起即可了(看起来是要求下降了是吧。。。。233),然后我们就需要求出所有频道属于某一个集合的斯坦纳树,最后用子集Dp把所有的斯坦纳树合成一个森林。       具体的,首先枚举频道的集合,然后把所有属于这个频道集合的站点弄粗来,然后这些站点就构成了一个集合对吧。。然后就可以用斯坦纳树的方法dp+spfa搞出这个集合的斯坦纳树辣!!!

2016-03-09 08:22:17 1474

原创 bzoj4421 Digit Division 递推

由归纳法可得,对于某一段(i,j)是其中一段当且仅当(1,j)%M=0且(1,i)%M=0。那么可以用前缀和的思想,统计出有多少(1,i)%M=0,假设有t个,那么答案就是2^t。       注意上述分析只有在有解的条件下成立,如果(1,n)%M!=0,那么答案=0。AC代码如下:#include#include#define p 1000000007using namespa

2016-03-08 21:38:15 771

原创 bzoj2243 染色 树链剖分

为了练手速我花了半个小时打完了这道题。。然后debug的时候就。。23333       首先如果是一个序列显然可以用线段树区间修改,维护段中的颜色数量,左右端点的颜色来做吧。       树上也一样,我们可以把树上的区间转化为dfs序列中若干个连续区间,然后用树链剖分使区间的个数(说白了就是一道树链剖分裸题)。AC代码如下:#include#include#include#

2016-03-08 18:24:05 503

原创 bzoj3875 骑士游戏 最短路

以前看到过类似的最短路,就是已知一个集合(称为S),在这个集合全部得到后经过t的时间可以得到另一个集合(称为T),求从一个物品得到另外一个物品的最短时间。不妨先看一下这个类似的问题:       在这个问题中,用bellman-ford,看S能否更新T中的某一个,直到不能更新就终止。       那么同样在这个问题中,首先定义d[i]的初值为法术杀死i的时间,d[i]的终值为杀死i(及其产

2016-03-08 18:16:58 518

原创 bzoj2595 游览计划 斯坦纳树&状压Dp

一直不知道斯坦纳树是什么东西。。。(搞得我现在完全知道了一样)。大概就是求一棵树连接一些带权点使某个总和最小吧。(就是一个理论模型而已不是什么算法?)       所以这道题目求得是一个斯坦纳树很明显吧。。不过没有卵用。       求斯坦纳树的正常姿势:状压Dp!(叫子集Dp也行吧。。)       令f[i][j][k]表示已经连接的景点的集合为k时,包含点a[i][j]的最小

2016-03-08 09:53:57 1295

原创 bzoj4300 绝世好题 动态规划

注意ai不一定(我想骂出题人。。。)       我们可以用f[k]表示最后一个数二进制第k位为1时的最大值,那么以x结尾的数列的最大值即max{f[k]+1},且x的第k位为1。然后再用x更新答案即可。AC代码如下:#include#includeusing namespace std;int n,f[35],bin[35];int read(){ int x=0; ch

2016-03-08 08:14:09 786

原创 bzoj4416 阶乘字符串 子集dp

膜拜了Claris大。       首先可以得到当n>21时无解。       令g[i][c]表示i之后第一个为c的字母的下标。       令i为用二进制表示的已经选取的字母的集合,令f[i]表示选取的字母的集合的全排列都出现的最短的原串的前缀的长度。然后枚举字母转移。显然当且仅当f[2^n-1]AC代码如下:#include#include#includeusing

2016-03-07 21:41:00 1392 2

原创 bzoj2337 XOR路径 高斯消元

遇到位运算,还是一位一位来。假设考虑二进制第k位,那么       令f[i]表示以到达i时,第i位存在的期望,那么对于所有与i相连的j,如果(i,j)的第k位为1,那么f[i]+=(1-f[j])/i的入度,否则f[i]+=f[j]/i的入度。       这样看起来有n个方程,但是有一个是没用的,随便去掉一个。然后实际上令从n到1是等价的,只需要让f[n]=0即可。AC代码如下:

2016-03-07 20:05:53 505

原创 bzoj4128 Matrix BSGS&hash

顺便学了一下矩阵求逆(其实就是一个高斯消元),不过后来没有用。       采用BSGS的思想,实际上令m=sqrt(p),那么就是求最小的i*m-j使得:      (A^m)^i=A^jB,其中A^j一共m个,可以预处理。       因此关键是快速判断两个矩阵是否相等。可以将矩阵看成一个大的p进制数然后将其取模后得到的值设为其hash值,判断为O(1);或者用另外一种方法,即将矩

2016-03-07 15:50:02 1291

原创 bzoj3611 大工程 虚树

这应该是一道很裸的虚树了吧。。。       (最近发现把树形dp的递归形式改成按dfs序列排序后倒序操作会变快!!O(NlogN)       首先构造出关键点的虚树。       对于虚树中的每一个点,用sum[x]表示所有以x为顶点的链的总长度,f[x]表示以x为顶点的链的最小值,g[x]表示最大值。显然f[x]和g[x]的转移是很方便的,更新答案也很方便。而sum[x]的转移也

2016-03-07 11:06:25 446

原创 bzoj3572 世界树 虚树&树形dp

很明显的虚树题。       把关键点的虚树构建出来,然后可以两遍遍历得到离点i最近的关键点的距离和编号。那么现在考虑虚树中的一对点(x,y),x为y的某个儿子,考虑其对答案的影响。       由于是虚树,那么显然所有y->x的路径上的点,这个点延伸出去的点中(不包含由y->x的路径)不会有关键点存在,那么离这些点最近的虚树中的点,要么是x,要么是y,而且一定是先到达y->x的路径上的某

2016-03-07 09:41:48 857

原创 bzoj3991 寻宝游戏 dfs&set

考虑关键点(有宝藏的点)及其lca构成的虚树,由于最后还需要回到原点,因此答案相当于虚树中所有边权的和的两倍。       考虑树的边权的两倍怎么求,实际上就是按dfs序排序之后第一个点和第二个点,第二个点和第三个点……最后一个点和第一个点的距离的和。那么用set维护dfs序,插入和删除的时候统计一下就好了。AC代码如下:#include#include#include#incl

2016-03-06 21:28:43 590

空空如也

空空如也

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

TA关注的人

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