BZOJ
文章平均质量分 76
Zeyu_King
蒟蒻代码风格巨丑,神犇勿喷:)
展开
-
省选模版复习——LCT
bzoj2157 LCT裸题#include #include #include using namespace std;const int INF=1e9;const int Maxn=40005;int son[Maxn][2],sum[Maxn],minx[Maxn],maxx[Maxn];int inv[Maxn],rev[Maxn],w[Maxn],fa[Maxn]原创 2015-04-15 08:22:42 · 539 阅读 · 0 评论 -
省选模版复习——主席树
bzoj3653 谈笑风生dfs序,主席树水过去吧#include #include #include #include using namespace std;#define pb push_backtypedef long long LL;const int Maxn=300005;LL sum[Maxn*20],ans;int stk[Maxn],dep[Maxn原创 2015-04-16 08:50:23 · 514 阅读 · 0 评论 -
省选模版复习——后缀数组
bzoj3238 后缀数组水#include #include #include using namespace std;const int Maxn=500005;typedef long long LL;LL Ans;char S[Maxn];int H[Maxn],Rank[Maxn],q[Maxn],pre[Maxn],nxt[Maxn];int l,r,N,i,原创 2015-04-15 08:20:52 · 509 阅读 · 0 评论 -
[bzoj 3563&3569]DZY Loves Chinese I&II
3263是道sb题,随便水过去吧。。。。。3569才是正真的神题!用dfs搞出一棵生成树,把边分为树边和非树边。对于非树边我们随机分配一个数值给他,而树边上的值为覆盖其所有非树边权值的异或和。我们来看一看删边的情况:1、仅删除非树边,很明显这样一定仍是联通的。2、删除树边和非树边,只有将树边和覆盖这条树边的非树边全部删除才能使图不联通,由于我们刚刚的预处理,这些边权值的异或原创 2015-04-13 22:39:39 · 980 阅读 · 0 评论 -
[bzoj 1049] HAOI2006数字序列
这题放了很久了,这次终于下定决心切掉他!第一问很好处理,把值减去标作为新值,求最长不下降序列即可。第二问,有一个很好的性质。还是处理第一问中的新值,发现最优解中两个不变点i,j之间的数都是小于a[i]或大于a[j],并且修改之后存在一个k使得i~k个全为a[i],后面的全为a[j]。这个性质很好利用,借鉴Mato的blog里的做法可以水(随机数据。。。。。)//Mato用理论O原创 2015-04-13 11:14:02 · 886 阅读 · 0 评论 -
[bzoj 1484] HNOI2009 通往城堡之路
找了别人的程序看了好久,终于大概理解做法了。。按第一个点的值可以搞出每个点的下界:b[i]=a[1]-(i-1)*d这样每次我们可以把操作变成增加一些值,尽量使代价减小,并最终使a[n]=b[n]每次选择对结果影响最优的点j(代价增加得最少或者减少得最多),注意dlt要满足大概就是这样吧。。。。。/*网上好多鬼畜的题解都说啥“仙人掌dp”。。。。。也许是蒟蒻太弱,无原创 2015-04-07 19:11:07 · 1216 阅读 · 0 评论 -
[bzoj 3994] sdoi2015 约数个数和
需要用到一个神奇的式子:d(nm)=sigma [ gcd(i,j)==1 ] 其中i|n&&j|m把这个做前缀和应用到最终答案中去可得ans = sigma( {n/i} * {m/j} * [ gcd(i,j)==1 ] ) 其中{x}表示x向下取整应用莫比乌斯反演可得ans = sigma( {n/i} * {m/j} * sigma mu(d) )其中d|i&&d原创 2015-04-22 09:30:59 · 1010 阅读 · 0 评论 -
cqoi2015部分题解
只做了前三题。。。。。T1、选数先把题目转化为求选n个数最大公约数为1,不用说了。假定f[i]为选出n个数最大公约数为i的方案数。由于题目中有条件H-L令L=(L-1)/i, R=H/if[i] = (R-L)^n - sigma f[a*i] - (R-L)最后的R-L为减去全部选择一个数的方案数答案为f[1]PS:如果范围中有1,注意f[1]++,因为全部选原创 2015-04-22 09:48:00 · 514 阅读 · 0 评论 -
2015年国家集训队测试 矩阵变换
居然给想出解法了。。。。从题目中我们可以看出,每个数一定是尽量取列靠后的。如果这样一行中出现了多个数怎么办?拿纸出来画一画可以发现我们因该保留靠前的那一个而把靠后的一个再向前一列取一下。#include #include #include #include using namespace std;#define pb push_backint g[205],rk[205]原创 2015-04-05 20:32:25 · 651 阅读 · 0 评论 -
[BZOJ 3043]IncDec Sequence
非常好的一道题目,很有启发性。题目里面规定每次可以选一个区间队区间里的数统一加上1或减去1,要求最少的操作数使得的数列里的所有数都一样。一开始想了好久好久,一点思路都没有。。。。后来看了题解,彻底被这种思路折服了由于操作都是区间操作,那么区间里的数相对差值是不变的,那么我们可以将所有的数和其前一个数做一个差形成一个新的数列,我们权且叫他数列b很明显,只有当数列b除了第一个元素外所有原创 2014-12-10 06:51:05 · 816 阅读 · 0 评论 -
单纯形解线性规划
1、noi2008 志愿者招募这题更广为人知的解法是网络流建模,题解戳这里其实可以拿线性规划水过去单纯形讲义戳这里网上好多程序据若都没看懂,最后才知道他们套用了一个叫做对偶性的定理。。。。大概就是长这样:(证明就不放了,都可以在算到上找到)所以这题就可以水过去了。。。。速度确实比裸的spfa求网络流快code//最小费用最大流#include #原创 2015-04-23 19:00:03 · 704 阅读 · 0 评论 -
省选模版复习——线性筛法
bzoj 3944 sum求phi和mu的前缀和,n首先orz叉院lyp大神的讲义。以下为lyp大神讲义的公式推导过程(我不生产公式,我只是大神的搬运工~~)假设我们需要求f(x)的前缀和令g(n)=sigma f(d) (满足d|n) F(n)=sigma f(i) (1我们可以得到sigma g(i) (1 =sigma f(i)*[n/i] (1<原创 2015-04-15 19:24:54 · 583 阅读 · 0 评论 -
整体二分入门
骗分神器!推荐论文:xhr2013集训队论文能够整体二分的题目必须满足一下几点(摘自xhr论文)1、询问答案具有可二分性2、修改对答案的判定相互独立,互不影响3、如果修改对询问有贡献,则贡献是确定的,且与判定标准为无关4、贡献满足结合律、交换律,具有可加性5、题目允许离线(好像现在大部分题目强制在线)另外一个很重要的一点就是注意些整体二分时必须是的当前步骤的复杂度只原创 2015-04-24 09:40:40 · 2218 阅读 · 0 评论 -
[bzoj 3626] LNOI2014 LCA
神题!虽然想到离线,但是还是只会随机数据的做法。。。。有一个比较有意思的结论:把点i到根的所有点权值设为1,其他点为0,此时j到根的所有点权和即为dep[LCA(i,j)]不难发现,这个方法满足加法性质。把询问查分,从1到n处理每个点,将其到根的权值+1,询问只要看这个点到根的权值和就是LCA的深度和了!LCT维护即可#include #include #inclu原创 2015-06-13 21:55:09 · 674 阅读 · 0 评论 -
[bzoj 2653] middle
陈老师的神题,先拜一下求中位数用二分的方法很容易想到。可以想到我们把二分到数x后,把小于x的定义为-1,大于等于x的定义为1,只要求出一个子序列和大于等于0就说明中位数大于等于x(题目中的n/2是向上取整的)然而之后我并不知道怎么做一般我们建立主席树都是按照数组下标顺序来建的,这题比较奇葩。假设我们只需要查询中位数为x的时候,最大的子序列和是否大于等于0,会做吧——直接弄出原创 2015-06-13 07:14:20 · 736 阅读 · 0 评论 -
[bzoj 2654] tree
跪神题,跪秒题大神zy!很多人的第一想法就是选前need小的白边,再放黑边,很不幸这是错的正确解法很有启发性。如果我们按照正常的选边来做最小生成树,如果选出的白边大于need条,我们就需要少选一些的白边,否则我们就需要多选一些白边。如何才能少选一些白边呢?我们可以该白边全部加上一个正数,同理我么可以多选一些白边。这样我们就可以二分了!但是这还有一些问题,假设我们二分得到原创 2015-06-11 22:18:50 · 823 阅读 · 0 评论 -
莫队算法小结
终于把糖果公园a掉了,写点小结冷静一下(由于博主现在思维混乱,所以请用混乱的思维来阅读本篇文章)1、小z的袜子这算是鼻祖了吧。把序列分成sqrt(n)块,把询问先按左端点所在的块顺序,再按右端点升序排序,可以证名这样暴力移动左右端点最多达到O(n^1.5)的复杂度简单吧code是很就以前写的了,很丑勿喷#include #include #include #inc原创 2015-06-11 22:17:13 · 678 阅读 · 0 评论 -
后缀自动机初步
想学这个算法很久了省选结束后终于下定决心好好学学!先推荐两篇文章http://hi.baidu.com/myidea/item/142c5cd45901a51820e25039?qq-pf-to=pcqq.grouphttp://blog.csdn.net/huyuncong/article/details/7583214学好后缀自动机的关键就是理解其转移边与父亲变得不原创 2015-04-23 20:01:13 · 1701 阅读 · 0 评论 -
[bzoj 4080] Wf2014 Sensor Network
will讲的题,网上几乎都是用随机化算法过得,代码短的出奇,为了维护标算的尊严,我决定推广一下表算。。。。你敢信这题是二分图最大独立集!?枚举距离不超过d的两个点,已这两个点为圆心,距离为半径分别作圆,会形成如下的图形可以看到上半部分的点之间距离小于等于d,严格来说是小于确定两点之间的距离。下部分同理。但是上下部分的点之间距离可能超过d,在这些点对之间连一条边。求最大独立集原创 2015-06-13 07:58:20 · 1024 阅读 · 0 评论 -
[bzoj 3196] 二逼平衡树
网上各种方法都有了。。。。去年学主席树的时候准备用树状数组套主席树水过,结果发现空间比较吃紧,就一直放在那边没敢碰。前几天在那出来时——嗯,似乎是裸的线段树套平衡树(虽然我没有写过)。于是就这样码下去了。。。。。原创 2015-05-01 09:55:17 · 804 阅读 · 0 评论 -
[bzoj 2565] 最长双回文串
似乎把这题些颓了。Manacher预处理,得到g[]数组。之后蒟蒻就开始无脑的用数据结构大法了。。。慢得飞起#include #include #include #include using namespace std;char S[200005];int minx[800005],tip[800005],g[200005];int maxl,p,i,N,n,t,原创 2015-04-09 19:57:21 · 530 阅读 · 0 评论 -
APIO2014题解
话说就要APIO2015了,我才把2014的题做完。。。。1、回文串当时考场上据说有很多人用Manacher+其他各种字符串利器虐了。。。但是现在我们有了回文树这种裸题,这不是水吗。。。。。#include #include #include using namespace std;typedef long long LL;const int Maxn原创 2015-04-24 16:36:44 · 1823 阅读 · 0 评论 -
[BZOJ 2790]POI2012 Distance
乍一看以为是神题,想了想,原来很暴力。。。可以看到乘和除是没有顺序关系的,那么为了我们就统一先除再乘。假设我们已经把原数除完了变成x,那么再在x上乘一些数使得得到的数在所有书中所需的步数最小,记为min1,次小的几为min2。预处理大法~~~~对每个数字枚举所有约数d,更新的最小值。在计算答案,同样枚举约数,利用min1或min2计算即可。代码#include #in原创 2014-12-16 16:49:45 · 919 阅读 · 0 评论 -
[BZOJ 2084]POI2010 Antisymmetry
说白了就是判断两个相反的串,从某一位置开始,向两个串的相反方向延伸,使得到的子串是相同的,并且长度最大。求最大的延伸长度。水题,很明显的hash吧,O(nlgn)。也可以看作是manacher的变种,跑manacher可以做到线性复杂度。#include #include #include using namespace std;const int MOD=(1e9)+7原创 2014-12-07 12:45:57 · 932 阅读 · 0 评论 -
[BZOJ 2795]POI2012 A Horrible Poem
很优美的题目:)列出以下性质:1、循环节一定是长度的约数(废话。。。)2、如果n是一个循环节,那么k*n也必定是一个循环节(关键所在)3、n是[l,r]这一段的循环节 的充要条件是 [l,r-n]和[l+n,r]相同(利用这个性质我们在判断是否为循环姐是可以做到O(1))我们从性质2开始,如果len是循环节,那么最小循环节一定是len的约数——是不是有想法了?枚原创 2014-12-17 22:01:44 · 1609 阅读 · 0 评论 -
[BZOJ 2796]POI2012 Fibonacci Representation
大概就是说假设 F(x)d[n]=min( d[a-F(x)] , d[F(x+1)-a] )+1记忆化一下就行了。证明吗。。。这个坑再填吧。。。#include #include #include #include using namespace std;typedef long long LL;LL f[110],n;int Q,i;map hash;in原创 2014-12-17 22:20:19 · 1142 阅读 · 0 评论 -
[BZOJ 2085]POI2010 Hamsters
表示蒟蒻在ac这道题之前理解的矩乘都是极为片面的原本我以为矩乘只能优化线性转移,例如f[n]=ai*f[i]+aj*f[j]+ak*f[k].......其实这样的方程也是可以转移的:f[n]=min(f[i]+ai,f[j]+aj,f[k]+ak......) Matrix operator *(const Matrix &x)const{ Matrix ret; fo原创 2014-12-21 14:40:24 · 946 阅读 · 0 评论 -
[BZOJ 2096]Poi2010 Pilots
NOIP题,两个单调队列即可~~~~#include #include #include using namespace std;const int Maxn=3000005;int qx[Maxn],qd[Maxn],a[Maxn];int lx,ld,rx,rd,n,i,j,k,ans;int read(){ int ret=0; char ch=getchar(原创 2015-01-07 13:00:04 · 602 阅读 · 0 评论 -
[BZOJ 1133]POI2009 Kon
比较简单的DP题吧,不多解释了,直接上代码#include #include #include using namespace std;int n,K,i,j,k,s[605][605],g[605][605];int ans,x,y,f[605][55],p[605][55];void print(int x,int y){ if (y==0) return; pri原创 2014-11-24 12:26:34 · 1121 阅读 · 0 评论 -
[BZOJ 2277]Poi2011 Strongbox
蒟蒻被神题虐暴了。。。。。感觉之前的数论都白学了考虑可行的密码x,y,那么(x+y)%n也可行。那么也就是说k*gcd(x,y)%n都可行,我们权且称gcd(x.y)为基数p。我们已经有了一个可行的密码t,那么p就是t的约数。再者我们有m-1个不可行的密码x,也就是说p不能满足k*p%n=x,这个可以用扩欧判断一下。最后我们还需要看到t必须是n的约数,因为如果不原创 2015-01-08 09:50:57 · 1284 阅读 · 0 评论 -
[BZOJ 2803]Poi2012 Prefixuffix
在说正解前先orz一下zy的神骗分算法——枚举总长度——如果在1~i和n-i+1~n这一段字母acsii和相同则在做下一步判断然后枚举判断啦。。。。居然只超时一个点(数据好和谐~~)!回来说正解。看到题解,好厉害的题目!这题目有个好厉害的性质。我们用F[i]记下(i+1,n-i)的最大相同前缀后缀,那么F[i-1]证明就用反证法,自己画了张拙图:如果F[原创 2015-01-08 10:25:57 · 1296 阅读 · 0 评论 -
[BZOJ 2086]Poi 2010 Blocks
实战的时候逗比的使劲儿优化O(mnlgn)的算法,搞得吐血后才多对1个点,还是有2个点毫无压力的T啦然后看了题解才发现自己逗比到一定境界了。。。。我们的目的就是找到最小的j,使得j这样我们就可以去掉lgn了。把s最成一个单调下降的序列,现在队列求出n对应的j(很明显j存在于这个下降序列中),我们发现在找n-1对应的j中,若想更新答案,其对应的j必定比n对应的j小!因此我们只用两个指原创 2014-12-07 12:49:08 · 1086 阅读 · 0 评论 -
[BZOJ 2791]POI2012 Rendezvous
逗逗逗,一开始看错了题目,然后杯具了一个多小时。。。。。看明白了题目还是思路还是很直观的。首先若果两个点的在环之外就可以走到一起,很明显这就是最优解。如果在环内的话,那么我们分找出两个点第一个进入环的祖先,很容易证明最优解一定是这两个祖先中的一个,然后。。。敲代码吧#include #include #include using namespace std;const i原创 2014-12-16 21:43:57 · 762 阅读 · 0 评论 -
[BZOJ 3060]POI2012 Tour de Byteotia
考试的时候瞎写了个骗分算法居然给碰上标算了。。。先说一下当时是怎么想的吧,本来是打算直接按照读入顺序加边并删除的,但是这很明显有反例,于是。。。。于是我决定先把两端点均大于k的加入,再把剩下的边加进去。。。。。。评测出乎意料的过了看了题解后再yy,似乎这样做很靠谱。首先第一次加入的边是显然正确的。那么剩的点最多形成一棵树,用类似kruskal的加边方法就行了!#incl原创 2014-12-16 21:52:25 · 1180 阅读 · 1 评论 -
[BZOJ 2081]POI 2010 Beads
练暴力的题目。。。直接枚举长度,计算答案,hash判重。复杂度其实和调和级数有关,大概就是O(n*ln(n))(笔者偷懒判重直接用排序写了,水过了。。。)#include #include #include using namespace std;const int MAX=(1e9)+9,Maxn=200005;int po[Maxn],hash[Maxn],rhash[原创 2014-12-07 13:03:12 · 684 阅读 · 0 评论 -
[BZOJ 1138] POI2009 Baj 最短回文路
做题的过程还是挺曲折的。最下的想法是把原创 2014-11-24 12:31:34 · 928 阅读 · 0 评论 -
[BZOJ 2082]POI 2010 Divine divisor
数论小集合。题目里第一问本质上要求的其实是 数a1*a2*a3*....*am(m2^(指数是k的素数个数)-1瓶颈在于我们如何求出这个质因数分解,ai我们最多能找出ai在10^6(不到80000个素数)以内的质因子,我们就先找出小因子。与下来只可能存在 p、p*q、p^2p^2的情况可以很容易判定能够出来我们又可以想到了大素数判定(笔者弱弱的不会写Miller-Rab原创 2014-12-07 14:40:51 · 981 阅读 · 0 评论 -
[BZOJ 2087] POI 2010 Sheep
神题啊首先必须yy出一个性质:一条边如果不能将点分成两部分为偶数个点,那么无论在哪种方案中他都是不合法的!(其实很明显啦,蒟蒻想了半天也没发现)我们枚举凸包上每个点,按此点为原点将剩下的所有点极角排序。复杂度O(nm logm)有了边之后,我们可以设计dp了。f[i][j]表示从i顺时针到j之间的已经全部分完了的方案数,可得f[i][j]=sigma(f[i][k]*f[k][原创 2014-12-16 09:15:22 · 840 阅读 · 0 评论 -
[BZOJ 2801]POI2012 Minimalist Security
首先不要被题目吓倒,这题你就做出大半了。只有联通块内才会互相约束(废话)扫描每一个联通块,找到一个起点,假设他的权值为x。那么每个连出去的边的终点权值为 w-x 。也就是说每个点上一定为kx+b(其中k=1或-1)也许每个点会被扫描到多次,分以下几种情况1、k1==k2,若b1!=b2无解,若b1==b2.......没有影响,继续running2、k1!=k2,那么我们原创 2014-12-21 15:20:25 · 989 阅读 · 0 评论 -
[bzoj 2526]Poi2011 Inspection
water,water,water。。。。树上维护几个值就好了(NOIP模拟赛上的常见题。。。。)#include #include #include using namespace std;typedef long long LL;const int Maxn=1000006;int node[Maxn*2],next[Maxn*2],a[Maxn],q[Maxn];in原创 2015-01-06 13:38:34 · 911 阅读 · 0 评论