- 博客(135)
- 收藏
- 关注
原创 【 bzoj 1355 】 [Baltic2009]Radio Transmission - KMP
考虑一个串重复出现多次并在最后超出这个字符串的话,肯定存在一个最长后缀等于最长前缀且后面剩下来的一截是那个重复串。 KMP一下没了。#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >=
2016-02-16 12:08:40 743
原创 【 bzoj 2555 】SubString - LCT SAM
LCT无脑维护SAM的right集大小。 别问我为啥范围开到那么大= =#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >= _ ; i --)inline int rd() {
2016-02-15 23:02:40 920
原创 【 bzoj 2400 】Spoj 839 Optimal Marks - 最小割
每一位之间的贡献是独立的,所以枚举二进制位来算。 每个未确定的点,显然他的权值要么是0要么是1,他划进0有一个代价,划进1有一个代价,同时和相邻的未确定点也有代价。如果用最小割,割完后SS的权值均为1,TT的权值均为0,这样最小割就是最小代价。考虑怎么去构造这样的图。 对于确定是1的,从s连到他inf流量,确定是0的连到t也是inf流量,剩下按无向图建图即可。 割完后从S开始跑个d
2016-02-15 20:59:12 852
原创 【 bzoj 2127 】happiness - 最小割
A了这题的我是这样的:暴力建模似乎没啥好说的。。做了2132之后感觉会好些。。。#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >= _ ; i --)#define fore(i,u)
2016-02-15 16:11:29 731
原创 【 bzoj 2132 】GDOI圈地计划 - 最小割
考虑黑白染色成二分图。我们要的是最大收益,那么就应该是删掉最小的一些收益。对于白点WW,连S→WS\rightarrow W,W→TW\rightarrow T,容量分别为A收入和B收入,黑点则反过来,然后有关系的双向连上容量为C的和的边。 这样割掉之后就行了。#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) fo
2016-02-15 15:37:57 942
原创 【 bzoj 3955 】[WF2013]Surely You Congest - 网络流 SPFA
显然地可以看出两个乘客有可能撞车当且仅当他们的最短路相同。 于是对乘客按最短路分组,每组在图的最短路DAG上跑类似最大路径覆盖的东西即可。 每次稍微要重新构图,复杂度可能比较高,不过跑起来还是可以的。 #include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for (int i = a , _ = b
2016-02-15 10:49:42 1238
原创 bzoj 1449 && bzoj 2597 - 一类凸费用网络流
对于一个网络G=(V,E)G=(V,E),若其中的边权Wu,vW_{u,v}与边(u,v)(u,v)的流量fu,vf_{u,v}呈凸关系,则可以拆边来搞,设其费用与流量的关系为g:fu,v→Wu,vg:f_{u,v}\rightarrow W_{u,v},那么第i条边容量为1,费用为g(i)−g(i−1)g(i)-g(i-1)。 这两题有几个共同点,一是在于凸费用,二是在于需要分配点的流量。前
2016-02-14 19:26:27 1230
原创 【 bzoj 2661 】 [BeiJing wc2012]连连看 - 拆点费用流
每个数ii拆成两个点LiL_i和RiR_i,连边S→Li,Ri→TS\rightarrow L_i,R_i\rightarrow T流量为1费用为0,每对有关系的数(x,y)(x,y)连边 Lx→Ry,Ly→RxL_x\rightarrow R_y,L_y\rightarrow R_x流量为1费用为x+yx+y,打个表可以发现边数不会很多,直接跑最大费用最大流。 #include <bits/
2016-02-14 19:14:30 1231
原创 【 bzoj 1797 】[Ahoi2009]Mincut 最小割 - 经典题
这个题就是要求一条边在最小割里面的充分条件和必要条件。 首先考虑第一问,也即求充分条件。 我们先对这个图进行最大流算法得到任意一个最小割。设这个时候的残量网络为GfG_f。那么GfG_f中的点集可以显然地被分成了三部分,一部分是源ss可以到达的,一部分是可以到达tt的,剩下的独立成一部分。 可以证明,第一类点一定会被归为最小割中的SS集,第二类点一定会被归为TT集,第三类点两个集合
2016-02-14 19:05:33 1811 1
原创 【 bzoj 3509 】[CodeChef] COUNTARI - 分块FFT
看起来很像数据结构乱搞? 然而仔细看看数据范围:Ai<=30000A_i<=30000 这意味着我们可以用生成函数来乱搞。 将式子变成Ai+Ak=2AjA_i+A_k=2A_j,于是就可以很愉快地枚举j,记录j两边的生成函数,然后求卷积 就行了 ……? 毛。。。这样卷积是O(nVlogV)O(nV\log V)的 //以下设V=max{A}V=\max\{A\
2016-02-04 21:05:23 2326
原创 【 bzoj 3545 】 [ONTAK2010]Peaks - Treap快速合并
听说这题有在线做法……?YY了一下似乎要把各种东西都给可持久化掉。。。好麻烦。。。
2016-02-04 19:19:37 1205
原创 【 bzoj 1014 】 [JSOI2008]火星人prefix
用平衡树瞎维护一下哈希串即可。 不知道为啥这题写Treap这么慢= = P.S.提取出区间之后一定要判断是否为空区间!插入的时候计数器也要++!#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b)
2016-02-04 19:09:32 1029
原创 【 bzoj 3065 】 带插入区间K小值 - 树套树乱搞
这题写的真是excited。。。 虽然树套树这种东西随便嘴巴嘴巴就会了。。。但是写起来还是十分的蛋疼。。。 下午四点左右开始写,到将近七点写完,然后吃饭+思考人生了一小时,又开始debug,将近十二点时过对拍,洗了发澡冷静了一下,然后轰炸评测机= =十二点半左右时AC。 最后发现是因为线段树值域开小了。。。orz。。。 带插入带修改的区间K小值是有很多做法的,然后我看VFK给
2016-02-04 01:00:22 1157
原创 【 bzoj 1500 】NOI2005 维修序列 - 平衡树乱搞 treap
嘛。。。又是屯了一年多的题。。。然而之前太弱了调不出来QAQ 随便一个可以提取区间的平衡树都可以搞这道题。 然后这题的splay我写过3个版本了。。。QAQ 为了写WC2016的T3,用treap写了一发这题练练手。 似乎没啥东西需要注意的。代码还好长,以后想办法缩一缩吧。。。
2016-02-02 23:31:14 1645
原创 【 bzoj 4355 】 Play with sequence - 线段树乱搞
先讲个故事。。。 据说某一天,claris扔了一道题到某群里面然后引起了不大的讨论~然后好学向上的whx同学发现了这题。。。聪明的whx想了很久。。。然后!whx发现看不懂claris给的暴力的证明。。。于是去找了吉司机。。。吉司机若有所思。。。再后来跟whx说:这是对的。。。然而whx同学并没有写。。。最后就弃坑啦。。。 第二年,whx来到WC2016的会场上,发现:诶,吉司机的线段树
2016-02-01 19:13:23 1743 2
原创 WC2016随记
简单地说WC基本就是:吃饭,听课,一脸茫然,吃点心,睡觉,吃饭,睡觉,听课,一脸懵逼,吃点心,睡觉,吃饭,不知所措,睡觉。 直接结果就是最后的测试挂啦。另外fsf 155pts rank2怒艹集训队! 不努力谁也保不了自己啊。
2016-02-01 16:43:22 871
原创 【 bzoj 4299 】 Codechef FRBSUM - 主席树乱搞
一眼看status吓得我还以为是分块。。。其实是水题。 考虑给定一个集合,如何得到FRBSUM。 按某种顺序从集合中取数,设之前取的数可以取到的最大值为mxmx(雾)且[1,mx][1,mx]都可以取到,然后现在新加了一个数xx,如果x≤mx+1x\leq mx+1,那么最大值可以由mx扩到mx+limmx+lim,同时(x,mx+lim)(x,mx+lim)内的数显然也可以得到。而如果
2016-01-21 17:01:30 1907
原创 【 bzoj 3514 】Codechef MARCH14 GERALD07加强版 - LCT
题意简单明了。。。 考虑从头开始加边。如果还是一棵树的时候,加入了一条边会怎么样。 如果还是树就不鸟他。 但是如果构成了环,那么这个环要存在的必要条件显然是最早的边要存在。(当然这个环上的其他边也要存在,但这不重要,因为如果最早的边存在了,这些边肯定会存在),如果将当前边设为EjE_j,这个环上标号最小的边设为EiE_i,那我们称EjE_j依赖于EiE_i。因为如果当前是棵树的情况
2016-01-21 16:48:56 1088 2
原创 HN集训201(5+6)酱油记
啊推了好久才有空来写酱油记…… 在HN的时候浪啊浪,每天晚上睡觉前dwj时不时都会说:酱油记还没开坑。。。然后我就想起来我只写了d1的酱油记23333和没写差不多嘛……然而回来广州之后立刻就发烧啦2333于是又拖啊拖拖到了回学校集训了= =才有空写一发……(真相是一直都在浪) 唔,这是一次轻松愉快的集训~在2015年的时候情况还是挺乐观的~前段时间测试的时候状态也不错,最高到了rank6?写了
2016-01-10 22:23:05 898 2
原创 HN集训2015酱油记 - day1
dwj大爷带我飞! 然而似乎卵气没多大暖用,dwj大爷晚上被冻醒了。然后我也醒了= =幸好早上鼻炎没有发作得太厉害……宾馆的餐厅却不敢恭维……我们到的时间略晚了,已经没啥吃的了……席间dwj发现了石门大爷,whx发现了某Au大爷(然而我仍没有认出来是谁)……现场气氛些许压抑2333 在老师带去机房的路上看了看NTT和LCT的板子,然后简单讨论了下top tree(其实啥都没说)和一些奇怪
2015-12-26 23:47:18 878 2
原创 【 Codeforces 514E 】Darth Vader and Tree - DP 矩乘转移
题面比较文艺。 大意:给一棵树,这个树有无限个节点。对于每个点,都有n个儿子,第i个儿子与这个点的距离为did_i。问这棵树有多少个点离根的距离不超过x。 首先可以列出一个DP:f[i]=∑nj=1f[i−dj]f[i]=\sum_{j=1}^n f[i-d_j],边界是f[0]=1f[0]=1。 似乎不是那么好做。但是注意到,di<=100d_i<=100,这意味着DP可以简化一下,
2015-12-22 22:21:26 1227
原创 【Codeforces 597C】 Subsequences - DP 主席树
题意:给一个长度为n的排列,求长度为k+1的上升子序列个数。 很显然的DP,f[j][i]f[j][i]表示到了第i位,取了长度为j的序列。 f[j][i]=∑a[k]<=a[i]f[j−1][k]f[j][i]=\sum_{a[k]<=a[i]} f[j-1][k],边界为f[0][k]=1f[0][k]=1。 用个主席树随便滚动地维护一下前缀和就好。 关于上升子序列系列的问题
2015-12-21 21:16:20 786
原创 【 bzoj 3992 】 [SDOI2015]序列统计 - NTT 生成函数
看起来很厉害的题 然而想到原根的话这题就成sb题了 因为模M为质数,所以一定存在原根,所以[0,M−2][0,M-2]内可以建立与[1,M−1][1,M-1]一一对应的关系。通过原根就可以把原本的乘法变成了指数上的加法。 然后因为它是个数列,很容易想到,也很显然地,可以构造这个数列的生成函数,xix^i的系数表示对应项为i的时候的方案数。 总之后面就是很水了,就是个快
2015-12-16 22:26:36 1000
原创 【 bzoj 2286 】 : [Sdoi2011]消耗战 - 树形DP
这道题的思路感觉挺赞的…… 暴力的DP,f[i]表示切到i点的最小代价,显然有f[u]=min{vip[v]?inf:f[v],dis(u,v)}f[u]=min\{vip[v]?inf:f[v],dis(u,v)\}。 这其中中间有很多dp都是不必要的,因为如果一条链D下来,那么两个关键点之间更新的权值都是相邻两点的距离,可以省略掉。 然后就可以用一个应该是挺经典的做法:用单调栈
2015-12-16 17:09:12 807
原创 【bzoj 4347】 [POI2016]Nim z utrudnieniem - 博弈论 DP
这题勉强算得上是博弈论?(雾 B要胜,就是说要使剩下的石子xor和为0。 计数嘛,数据范围又那么小,很自然地会想到DP。 f[i][j][k]f[i][j][k]表示前i堆石子取了余数为j的堆剩下的石子xor和为k的方案数。 显然f[i][j][k]=f[i−1][j−1][k]+f[i−1][j][k xor a[i]]f[i][j][k]=f[i-1][j-1][k]+f
2015-12-14 21:18:49 1178
原创 【 bzoj 3895 】 取石子 - 博弈论
只看出了操作数为奇数时必胜,后面并不会做了QAQ 于是%了PO姐的题解>_< http://blog.csdn.net/popoqqq/article/details/43989101#include <bits/stdc++.h>#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i>=b;i
2015-12-11 21:39:18 1258
原创 【 bzoj 3759 】 Hungergame
似乎是在美术课上听老师扯淡的时候突然YY出来的? 如果所有的箱子都是打开的,那么就是Nim游戏,直接看Nim和也就是异或和是否为0,是的话先手就输。但是现在有些箱子是打开的,同样也可以尝试用一般Nim游戏的思路来看这道题。 根据终态,很容易可以出猜测出如果打开的箱子的Nim和为0的时候先手必败。但是这是有条件的,必须要把最大的的Nim和为0的子集先打开,否则即使当前Nim和为0,后手仍然
2015-12-11 17:01:49 934
原创 【bzoj4352】 Tower
这不是sb题么我还想了这么久。。。TAT 先把长度都排个序 然后考虑插入第i个 显然前面i个都可以插在它上面 然后就是要考虑前面有哪些可以放在它下面,也就是Aj+D>=AiA_j+D>=A_i的j。随便就好了,然后答案乘上i−j+1i-j+1。 claris怎么做到的又快又短QAQ #include <bits/stdc++.h>#define re
2015-12-09 22:07:12 906
原创 【bzoj2927】[Poi1999] 多边形之战
可以注意到要取下黑色三角形,则黑色三角形三条边中至少要两条边不再有外接三角形。故设三元组(x,y,z)(x,y,z)表示黑色三角形三条边外接的三角形个数。不妨设x>y>zx>y>z。每次操作只能从x,y,zx,y,z中取一个来减1,终态为(x′,0,0)(x',0,0),此时先手必胜。 然后可以先分情况讨论一下。 当y=z=0y=z=0 时,显然先手必胜。 当z=0z=0时,易用归
2015-12-07 13:25:07 867
原创 【bzoj1822】[JSOI2010] Frozen Nova 冷冻波
Circle的构造函数没赋初值都能过样例真是厉害啊…… 这题做法比较显然。巫师和精灵构成了二分图,第i个巫师能干的精灵个数就是⌊Titime+1⌋\lfloor\frac{T_i}{time}+1\rfloor,判断所有精灵能否被干完的话跑个最大流就完事了。 至于时间,显然具有单调性,于是二分之。 没了。 判断线段和圆相交的话另外写一篇文章好了。 设网络流时间
2015-12-03 22:22:34 1100
原创 【bzoj1132】[POI2008] Tro
水题,用来巩固一下叉积。 cross(u,v)=xuyv−xvyucross(u,v)=x_uy_v-x_vy_u,其除以2就是u⃗ \vec{u}到v⃗ \vec{v}形成的有向面积。如果保证v在u的下方,则计算其围成的无向面积就不用加绝对值,而且满足结合律。 先从左往右从下往上枚举点,然后再按以这个点为极点的极角从下往上枚举点,边枚举边算叉积就可以了。 时间复杂度O(n2log
2015-12-03 20:44:56 891
原创 求同一个圆内的圆弧的并的算法
在一些计算几何问题里面经常会需要求同一个圆内的圆弧的并,在这里一次性讲了好了。 对于同一个圆内的圆弧,可以用弧度区间来表示出来。把这个圆的圆心放到极坐标系的极点上,这个圆弧起点和终点的角度所夹的区间,设为(θ1,θ2)(\theta_1,\theta_2),就可以用来表示这一段弧了。 有时候θ\theta可能会不在[−π,π][-\pi,\pi]里面,直接用这些带负数的区间来求并看起来不
2015-12-03 20:11:39 1408
原创 【BZOJ1043】[HAOI2008] 下落的圆盘
smg啊这种水题调了3h……前途一片灰暗…… 对于每个圆,它能够把前面的圆覆盖,同时会被后面的圆覆盖,它所贡献的周长是它自身周长减去被覆盖的部分,而被覆盖的部分是可以算出来的,用当前圆暴力和后面的圆全部求个交。对于一个圆,它被另外一个圆给交了,其被覆盖的圆弧的圆心角是确定的。也就是说,这个圆被覆盖的总弧度可以用各个圆心角的并得到。每被覆盖一次,就可以得到一个被覆盖的弧度的区间。在平面直角坐标系
2015-12-03 13:24:56 979
原创 十二月学习计划
感觉最近智商越来越低了……要做点智(D)商(P)题。 另外似乎十一月份没写到什么码农题呢……这个月真的得写几个了…… 大概是这样: DP题: 主要做CF上的题,平时看见有别的dp好题也可以做。 恶补计算几何: 先把计几的一些基本点弄熟些,写几篇小结,然后找找b站上的计几题,之后再做CF题。 恶补博弈论: 博弈论差成翔了……先找几篇论文读读,
2015-12-02 16:04:58 804 3
原创 【bzoj4065】Graphic Madness
CERC2012的(非超级大水题)最后一题了…… 这题没点智商似乎真的不会做呢…… 就是求一个特殊图的哈密顿回路,只是这个图由两棵树构成,两棵树之间的叶子节点数相等且一一有连边。 一开始我想,是否某个点的度数大于某个值之后就一定无解呢 然后我构造了一个模型把这个想法否掉了。 但是换一个姿势,如果是和叶子节点链接的个数呢? 注意到每个叶子节点的度数为2,这意味着经过
2015-11-26 22:25:11 984
原创 2012 Asia Tianjin Regional Contest - No Place to Hide
物理题!!!excited!!!虽然不是最擅长的…… 题意:有一个动点,速度为V0V_0,可以以各个方向前进(前进后方向不变),问最少选多少个别的点,使得不论这个动点往哪个方向转都会被碰到。 唔一开始太天真了列了个不知道多少元的二次方程……又仔细观察了之后发现其实可以套余弦定理。 设doctor所在的点为A,现在有一个interpol从点B出发以速度ViV_i追doctor。设他们
2015-11-25 22:24:10 2041
原创 【bzoj3157】 【bzoj3516】 国王奇遇记 && 国王奇遇记加强版
求∑mi=1immi\sum_{i=1}^{m}i^{m}m^{i}。 目前想到的做法是m2lognm^2\log n的,不知道可不可以分治什么的继续简化复杂度。 这个式子里比较难处理的是imi^m这一项,于是尝试用做差法消掉点什么。 m∑mi=1immi−∑mi=1immi\ \ \ \ m\sum_{i=1}^{m}i^{m}m^{i}-\sum_{i=1}^{m}i^
2015-11-25 17:37:06 1010
原创 【bzoj3155】Preprefix Sum
这题目名字挺有意思= = SSt=∑ti=1ai∗i=∑ti=1ai∗(n−i+1)−(n−t)∑ti=1aiSS_{t}=\sum_{i=1}^{t}a_{i}*i=\sum_{i=1}^{t}a_{i}*(n-i+1)-(n-t)\sum_{i=1}^{t}a_{i} 维护两个前缀和,∑(n−i+1)ai\sum (n-i+1)a_{i}和∑ai\sum a_{i},然后直接查询、
2015-11-24 22:16:11 1340
原创 【bzoj2982】combination
Lucas定理裸题。 设L(n,m)L(n,m)为模mod意义下的组合数。 则L(n,m)=L(n / mod,m / mod)∗(n%mod)∗(m%mod)%modL(n,m)=L(n\ /\ mod,m\ /\ mod)*(n \% mod)*(m\%mod)\%mod,其中/为整除符号,%为取模符号。 预处理出阶乘的模和阶乘的模的逆,直接计算。#include <bits/stdc++
2015-11-24 21:24:12 619
原创 【bzoj3223】文艺平衡树
splay,没什么好说的 尼玛记得kth的时候也要push啊!!! T_T#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i>=b;i--)#define lc ch[u][0]#define rc ch[
2015-11-23 21:14:09 850
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人