自定义博客皮肤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.

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

原创 HDU 4344 Mark the Rope

Miller-Rabin关于Miller-Rabin算法,可以看http://www.matrix67.com/blog/archives/234主要是用了费马小定理+二次探测,随机选取k个底数进行测试算法的失误率大概为4−k4^ {-k}。多随机几次就不太容易挂了。下面代码里的work是用来对拍的根号暴力。#include<cmath>#include<cstdio>#include<cstd

2017-04-27 23:33:22 430

原创 HDU 2138 How many prime numbers

Miller-Rabin关于Miller-Rabin算法,可以看http://www.matrix67.com/blog/archives/234主要是用了费马小定理+二次探测,随机选取k个底数进行测试算法的失误率大概为4−k4^ {-k}。多随机几次就不太容易挂了。下面代码里的work是用来对拍的根号暴力。#include<cmath>#include<cstdio>#include<cstd

2017-04-27 23:32:48 458

原创 51Nod 1600 Simple KMP

SAM+LCT/树剖线段树一个点的深度就是有多少个以这个点结尾的后缀等于前缀。fail树性质不太够,不好下手,直接考虑答案的贡献。对于两个相等的区间[l,r]&[x,y]其中l#include<cstdio>#include<cstring>#include<iostream>#define N 100005#define MOD 1000000007#define A 28#defin

2017-04-27 23:31:05 523

原创 洛谷 3338 [ZJOI2014]力

FFT把qi​q_i​除掉之后,发现所有Ei​E_i​的形式很有趣,都差不多,而且像卷积。考虑构造两个多项式来满足Ei​E_i​的答案就是两个多项式相乘的第i​i​个系数,乱构一下然后FFT即可。#include<cmath>#include<cstdio>#include<algorithm>#define N 400005using namespace std;namespace ru

2017-04-27 23:30:10 262

原创 BZOJ 4774 修路

斯坦纳树DP斯坦纳树经典DP方程:f[s][i]f[s][i] 表示当前需连通点的连通情况至少为ss,且路径上一定经过点ii的代价。为什么说是至少为ss,因为可能方案里的路径经过了别的点,然而在当前状态下我们只考察这ss个点,所以可以忽视别的点。经典的两步转移:f[s][i]=f[s′][i]+f[s−s′][i](无条件)f[s][i] = f[s'][i] + f[s-s'][i](无条件)f[

2017-04-27 23:28:00 502

原创 BZOJ 3698 XWW的难题

上下界最大流好久没写上下界的网络流了,赶快复习一遍。对于这道题建图不难,就是把行、列当成点,一个连S,一个连T。一个格子当成行到列的边,上下取整当成上下界即可。先说一下上下界可行流怎么搞。我们只要考虑把下界填平使得图流量平衡即可。对于入下界大于出下界的点,因为要填平下界,而出去的流量少了,因此要给它补充一些流量,S’向它连差值的边即可,反之连T’。 然后考虑上下界最大流怎么搞。一个办法是按照论文里说

2017-04-27 23:26:41 382

原创 BZOJ 3616 War

KD树+bitset对于一个联盟s,设会打它的个数为t,那它对答案的贡献就是 (n−tn)m(\frac{n-t}{n})^m考虑怎么得到t。对于一个点,我们希望在它能打到的所有点上面打上这个点的标记。直接打标记不行,考虑用KD树即可。然后联盟里的所有点用bitset或起来即可得到所有能打到这个联盟的点。题目保证了坐标随机,因此KD树的复杂度是期望 n‾√\sqrt n 的。#include<cma

2017-04-27 23:25:33 294

原创 BZOJ 3436 小K的农场

差分约束裸的差分约束,没什么好说的。大概说一下DFS版的SPFA为什么可以找得到负环。 前提是每一个点都被访问到至少一次。一个负环上一定存在一个点p,使得从p开始绕着环走出来的距离总是负数。反证,即假设每一个点出发绕环走都存在一次让走的距离为正,则可以构造一种方案使得可以无限次绕环走而总是非负,显然与负环矛盾。然后随便设一个源点向每一个点连边判SPFA负环即可。#include<bits/stdc

2017-04-27 23:24:28 318

原创 BZOJ 2618 [Cqoi2006]凸多边形

半平面交裸的,注意事项在代码里。#include<cmath>#include<cstdio>#include<cstdlib>#include<algorithm>#define N 505using namespace std;namespace runzhe2000{ typedef double db; const db eps = 1e-5; stru

2017-04-27 23:23:39 367

原创 BZOJ 1927 [Sdoi2010]星际竞速

费用流我只是想考前复习一下费用流……显然一个点只会进一次,出一次。那就考虑每一个点的出点抵达哪个点的入点。可以画成一个二分图的形式。一个特别操作的是可以直接跳到一个点上,那就建一个附加点使得所有出点连它,它连所有入点即可。#include<cstdio>#include<cstring>#include<algorithm>#define N 1605#define M 15005#def

2017-04-27 23:22:15 265

原创 UOJ 210 [UER #6]寻找罪犯

2-SAT首先2-SAT的tarjan做适用于一类如果A->B,则一定有B’->A’的对称的图。一个强联通分量里的所有点,要么一起选要么一起不选,那就缩起来。一个重要的结论是如果一个强联通分量里同时有A和A’,则此图无解,否则一定有解。无解的情况显然正确。有解的情况考虑构造。每次随便从点集里抓一个点A出来,选中A的所有可达点,删去所有可达A’的点。显然这是可以做到的。那这样会不会把图弄成无解?考虑如

2017-04-27 23:21:18 641

原创 黑吉辽沪冀晋六省联考 2017 BZOJ 4868&4869&4870&4871&4872&4873

这套题在BZOJ上的题号是4868~4873。 感觉还不错,就是有一些题弄起来有一点小恶心…… 这套题的部分分给得都很多,很良心的QAQBZOJ 4868 [Shoi2017]期末考试枚举+贪心枚举i表示第i天出完,把i之后的贪心挪到i即可。#include<cstdio>#include<algorithm>#define N 100005using namespace std;nam

2017-04-27 23:03:49 1437 1

原创 BZOJ 2631 tree

LCT好智障啊,update的条件设成判null了,其实应该是判isroot的……#include<cstdio>#include<algorithm>#define N 100005#define MOD 51061using namespace std;namespace runzhe2000{ typedef unsigned uint; int n, q;

2017-04-22 20:00:26 239

原创 BZOJ 4816 [Sdoi2017]数字表格

莫比乌斯反演题目就是要求,不妨设 n<mn<m ∏ni=1∏mj=1f[(i,j)]\prod _{i=1} ^n \prod_{j=1}^mf[(i,j)] 考虑一个ff的贡献,也就是变成 ∏nd=1f[d]∑ni=1∑mj=1[(i,j)=1]\prod _{d=1}^n f[d]^{\sum_{i=1}^n\sum_{j=1}^m[(i,j)=1]} 然后上面那个就是区间内gcd为定值

2017-04-17 22:27:29 684

原创 BZOJ 3786 星系探索

DFS序+平衡树刚开始在想平衡树维护树剖,发现这样并不能资瓷删点。而且好像复杂度还很劣。然后LCT目测搞不了子树修改。仔细观察, 一个点的答案只能贡献给所有子树里的询问,无视子树外的询问。也就是子树内和子树外是两回事,那就对一个点维护进入它的DFS序位置和从它子树出去的DFS序位置,一正一负,子树内的询问贡献一个正的,子树外的询问上负的直接抵消,这样就可以直接询问前缀和了。#include<cstd

2017-04-15 23:57:20 351

原创 Ural 2040 Palindromes and Super Abilities 2

回文自动机我只是想敲个板子复习一下啦……一个串的本质不同回文子串最多n个,因为新加一个字符的时候至多增加一个回文串,用border证即可。 好像BZOJ已经陷入了无法评测的境地......好气啊 #include<cstdio>#include<cstring>#define N 5000005#define A 2using namespace std;namespace runzhe2

2017-04-15 19:30:04 281

原创 BZOJ 4349 最小树形图

最小树形图+朱刘算法朱刘算法:http://acm.nudt.edu.cn/~twcourse/Tree.html#a17 啊虽然是繁体的不过写的挺详细的, 还有啊那个不叫水母叫环套树...... 为什么网上的朱刘算法都没有正确性证明啊,好气噢……感性理解一下吧这题的话,显然先把全部的都打一遍再把每一个打完,不会比其他方法更劣,因为其他方法通过交换打的过程都能变成前者。那就变成我们要找到最小的代价能

2017-04-15 14:23:44 638

原创 BZOJ 4316 小C的独立集

仙人掌DP记f[i][0/1]表示i取不取,子仙人掌的最大答案。树边直接转移,环边扫一圈转移。感觉自己很智障,DP方程没什么问题,倒是tarjan写挂了???直接把栈里剩下的东西拿来当环上的东西也是没救了……#include<cstdio>#include<algorithm>#define N 500005#define cmin(u,v) ((u)>(v)?(u)=(v):0)using

2017-04-13 14:25:43 447

原创 BZOJ 4596 [Shoi2016]黑暗前的幻想乡

容斥原理+矩阵树定理要求每一个公司都恰好选一条边出来,计数生成树。不太好做,考虑这个问题的反面,即存在一些公司选了多条边出来,然而这样也不太好做。这个反面等价于有一些公司没选,就好做了。话说我也不知道为什么 O(2n∗173)O(2^n*17^3) 能过。#include<cstdio> #include<cstring>#include<algorithm>#define mkp(_i, _

2017-04-08 19:51:09 371

原创 POJ 3648 Wedding

2-SAT关于了解2-SAT,推荐两个地方:《由对称性解2-SAT问题》、【研究总结】2-sat问题每次找到一个未被确定的Si,使得不存在Si Si’,选择Si及其后代节点而删除Si’及Si‘的前代节点。一定可以构造出一组可行解。一个重要的性质是不管怎么加限制,对于任意一对Si, Si’ , Si的后代节点与Si’ 的前代节点相互对称总成立。一类奇怪的加边是形如Si->Si’的,这条边保证了逆拓扑序

2017-04-03 23:20:52 250

原创 51Nod 算法马拉松23

A : 打表找规律 B : 数学期望 C : 拓扑排序+DP D : 状压DP E : 莫队+树状数组+卡常数 F : Unfinished听说省选推迟了一个月,整个人都不好了。放假打了一场51Nod,感觉整个人更不好了。A 1718 “多项式”能出在第一题的多项式肯定是有奇技淫巧的,打表找了一发规律,发现它的循环节是-1,-2,-1,1,2,1,…#include<cstdio>usi

2017-04-03 00:04:53 1593 2

原创 51Nod 1555 布丁怪

分治分治的方法很巧妙,就是写起来有一点小恶心先放CF题解:http://codeforces.com/blog/entry/17281题意就是问有多少连续区间满足区间内数字连续,这类序列计数一般考虑分治。一个分治区间[l,r],考虑怎么统计过mid的答案。暴力枚举左端点,然而右端点并不单调,不太好维护,考虑其他方法。出现上述情况,当且仅当已经有合法的跨mid的区间[a,b],然后b右边下一个元素可以

2017-04-02 00:31:37 410

原创 BZOJ 4553 [Tjoi2016&Heoi2016]序列

分治+线段树记l[i]表示i可能变成的最小值(包括a[i]),同理r[i]最大值。显然i能从j转移当且仅当i#include<cstdio>#include<algorithm>#define cmin(u,v) ((u)>(v)?(u)=(v):0)#define cmax(u,v) ((u)<(v)?(u)=(v):0)#define N 100005using namespace s

2017-04-02 00:31:09 366

原创 51Nod 1608 管道安装

一道观察性质好题- -。一个朴素的做法是插头DP,然而这题数据范围太大,考虑题目性质。 来个例子”L12”,其中12表示还没有填,L表示这个位置放了一个L形的管道。仔细观察可知此时1必有左插头,2不能有左插头因此必有右插头。类似地我们可以完全把一整行的左右插头确定下来。确定完之后我们可以保证这一行不会在左右插头的位置发生泄漏。同理做一下上下。最后答案就是2^(没确定的行和列)#include<cst

2017-04-02 00:30:03 355

原创 51Nod 1559 车和矩形

线段树+扫描线考虑符合题意的充要条件,是每一行每一列都有一个车?并不,显然可以构造出一行没有的合法情况,但此时必须是每一列都有车,因此充要条件是每一行都有车或每一列都有车。两种情况分开来做,考虑怎么判断每一行都有车。扫描线,按y轴排序,每一个矩形就相当于区间询问,只需判断区间里此时每一行的最近的车中最远的在哪,如果落在矩形外就不行了,于是只需求区间最小值。#include<cstdio>#incl

2017-04-02 00:28:57 499

原创 BZOJ 3620 似乎在梦中见过的样子

KMP显然给出的东西看起来就像border,因此有一个n^2的暴力KMP做法。我以为过不了,脑补了半天也没什么想法,然后发现题解就是n^2暴力???#include<cstdio>#include<cstring>#define N 15555using namespace std;namespace runzhe2000{ char s[N]; int n, k, nex

2017-04-02 00:27:36 322

原创 SPOJ 1812 LCS2

后缀自动机对于其中一个串建出SAM,把别的串S放在上面跑。对于每一个经过的节点记录串S能贡献给这个节点的max,再对每一个跑过的串在这个节点上取min,最终节点里min贡献的max就是答案。显然一个串能贡献一个节点,就能贡献这个节点的所有祖先,即fail树上到祖先的链都要更新。#include<cstdio>#include<algorithm>#include<cstring>#define

2017-04-02 00:27:01 285

原创 BZOJ 3473 字符串

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

2017-03-29 22:08:17 442

原创 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 469

原创 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 344

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

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

2017-03-25 17:54:04 1468

原创 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 286

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

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

2017-03-25 00:13:56 349

原创 BZOJ 4010 [HNOI2015]菜肴制作

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

2017-03-25 00:03:37 456

原创 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 1027

原创 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 900

原创 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 401

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

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

2017-03-19 00:32:30 378

原创 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 385

原创 51Nod 1831 小C的游戏

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

2017-03-18 14:29:27 724

空空如也

空空如也

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

TA关注的人

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