自定义博客皮肤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)
  • 收藏
  • 关注

原创 UOJ 2 [NOI2014]起床困难综合症

贪心我们的目标一定是让最终答案的二进制位的高位尽量为1 发现位运算只会影响一位 于是搞贪心#include<cstdio>#define N 100005using namespace std;struct door{ int op, t; int make(int x) { if(op==1)return x|t; if(op==

2016-10-05 13:09:18 328

原创 HDU 4372 Count the Buildings

第一类斯特林数很巧妙,注意到一个性质:n的数的环排列的个数与n-1个数的排列的个数相等。http://blog.csdn.net/hyogahyoga/article/details/7878871#include<cstdio>#define MOD 1000000007#define N 2005using namespace std;long long s[N][N], c[N][N]

2016-10-04 17:53:13 229

原创 HDU 2512 一卡通大冒险

第二类斯特林数、贝尔数http://blog.csdn.net/acdreamers/article/details/8521134#include<cstdio>#define N 2005#define MOD 1000using namespace std;int s[N][N], bell[N];int main(){ //第二类斯特林数 for(int i =

2016-10-04 17:37:04 376

原创 UOJ 184 [ZJOI2016]旅行者

离线分治,最短路这一篇说得很清楚了,时间复杂度也有分析: http://blog.csdn.net/neither_nor/article/details/51733997UOJ上的点实在是恶心。普通最短路不能过,发现每一次分治下去要连续跑最短路,前一次最短路的结果可以帮助下一次。然后套上堆优化dijkstra可卡过。听说用SPFA+SLF,LLL也可过?BZOJ网站昨天就挂了,有空再上去交一下4

2016-10-04 14:35:10 347

原创 UOJ 171 [WC2016]挑战NPC

一般图匹配建图很巧妙。将一个筐子拆成3个点都连球,并且这三个点也连成一个环,然后跑一般图最大匹配。我们看和球相连的匹配,一定是n,这样一来就会最大化筐子的三元环的匹配数。 然而筐子的环上能匹配就意味着装不超过一个球(有两个点没有匹配上)。给带花树打了一点注释 #include<cstdio>#include<cstring>#include<algorithm>#include<map>#d

2016-10-03 16:52:09 279

原创 BZOJ 3626 [LNOI2014]LCA

树链剖分+线段树+离线挂题解:http://blog.csdn.net/popoqqq/article/details/38823457主要思想:对于询问[l,r]和z,可以把[l,r]的每一个点到根的路径上的边的权值分别+1,计算z到根的路径权值和就是所求询问。于是离线排序做即可。好巧妙- -#include<cstdio>#include<algorithm>#define N 50005

2016-10-02 18:33:20 331

原创 BZOJ 2721 [Violet 5]樱花

线性筛神犇题解:http://blog.csdn.net/popoqqq/article/details/45095755我太弱了,推到x=y∗n!y−n!x=\frac{y * n!}{y-n!}的时候没有想到把分母设成t,导致看不出什么关系。由于换元之后有x=m2t+n!x=\frac{m^2}{t}+n!,要求x和t是整数,那么关系就很明了了。。。这一题告诉我们以后推式子要熟练换元,特别是分母

2016-10-02 16:45:31 392

原创 BZOJ 3526 [Poi2014]Card

线段树对于两个区间,如果我们知道前一个区间的开头卡片的不同选择(正面或反面)的结果,和后一个区间开头不同选择的结果,那么我们肯定能将他们合并,从而得到整个区间开头不同选择的结果。考虑线段树。f[i][0 / 1]表示i区间以正面/反面开头的单调不降序列是否存在,不存在记-1,存在就记最后一个卡片最小能选正面还是反面#include<cstdio>#include<algorithm>#defin

2016-10-02 13:47:41 331

原创 BZOJ 2083 [Poi2010]Intelligence test

链表子序列匹配,以为是什么高级的数据结构之类的,然而并不是。。。如果只有一个串,我们一定是贪心地遍历a,如果b的第一个数字是a[i],那么我们就直接把b的第一个元素去掉,继续匹配。那么多个匹配也是一样的,对于每一个a[i],我们只需要把所有开头是a[i]的b全部去掉头元素即可。可以链表维护。#include<cstdio>#include<vector>#define N 1000005usi

2016-10-02 12:10:11 294

原创 BZOJ 1257 [CQOI2007]余数之和sum

推式子+整除性质式子挺好推的,最后枚举商即可如何枚举商?我们用[l,r]表示枚举到的商对应的除数所在区间。 如果快速找出区间?假设l,r是上一次做完的区间,对于左端只需要l=r+1。对于右端,只需要r=k/(k/l),因为对于一个区间[l,r],能发生整除的一定是在k/r的位置,所以可以用整除的原理搞过去。为什么这样分出来的块是sqrt(k)级别的?1~sqrt(k)中的每个数都去除k,那么这里就

2016-10-02 11:13:58 390

原创 BZOJ 2038 [2009国家集训队]小Z的袜子(hose)

莫队裸莫队算法(orz莫队)详见http://www.cnblogs.com/hzf-sbit/p/4056874.html答案,要开,long long!!!#include<cstdio>#include<cmath>#include<algorithm>#define N 50005#define ll long long using namespace std;struct qu

2016-10-01 17:55:55 316

原创 BZOJ 1303 [CQOI2009]中位数图

对于b而言,b+1和b+2的贡献都是一样的,所以只要考虑数字是比b大或比b小,分别记为+1,-1,b自己记为0。left[i]表示从b那一位开始向左的子串中累加值为i的方案数,right同理,于是乘一下就好了#include<cstdio>#define N 100005using namespace std;int a[N], left[2*N], right[2*N], pos;int

2016-10-01 16:38:10 321

原创 BZOJ 1336 & 1337 最小圆覆盖

随即增量法详见百度枚举i,j,k,看上去是O(n^3)的,实际上因为数据随机,期望复杂度是O(n)的实际上做法也就相当于O(n^3)枚举三点确定圆,但是因为这个枚举是随即增量的,所以很强数据里应该没有奇怪的情况,所以没有被卡- -#include<cstdio>#include<cmath>#include<algorithm>#define N 100005using namespace

2016-10-01 16:06:20 299

原创 UOJ 34 多项式乘法

快速傅里叶变换关于FFT网上的教材不多,而且大多与算法问题关系不大。强烈推荐一个。这个讲得真的很不错:从多项式乘法到快速傅里叶变换本弱数学知识不够多,复数、单位根之类的知识都是下午临时补的。。。从下午开始看FFT,看到晚上,总算大概是把递归版FFT的思路看懂了吧。(迭代版的还没看懂。。。有空慢慢钻研)注意到IDFT的时候需要把所有单位根取倒数,那么有一个复数倒数式子: 设复数Z=a+b i 那么

2016-09-30 23:11:36 469

原创 BZOJ 3450 Tyvj1952 Easy

概率DP膜题解:http://www.cnblogs.com/y7070/p/5039670.html设L为现在的期望连续’o’的长度减一(不统计当前的这块)如果当前为’x’,显然当前格不贡献答案,且令L=0 如果当前为’o’,将会贡献2L+1【 (L+1)2−L2(L+1)^2-L^2 】的答案,L++ 如果当前为’?’,将会贡献0.5*(2L+1)+0.5*0的答案,L=0.5*0+0.5*

2016-09-29 20:47:51 287

原创 BZOJ 1532 [POI2005]Kos-Dicing

二分+最大流二分答案s->所有人,容量为二分的答案,表示允许赢的次数 所有人->分别参与的所有比赛,容量为1,表示赢这局 所有比赛->t,容量1,表示这局已经做完了如何有解,那么一定能满流#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define N 10010#define S 2*N-1#d

2016-09-29 19:38:18 312

原创 BZOJ 1185 [HNOI2007]最小矩形覆盖

凸包+旋转卡壳结论:一个凸包的最小矩形覆盖一定有一条边在凸包上证明?打表/对拍证明吧。。。(反正我不会证,为什么都说它是显而易见的?)然后跑凸包,枚举边,旋转卡壳找点搞一搞就好了#include<cmath>#include<cstdio>#include<algorithm>#define calc(a,b,c) cross(p[b]-p[a],p[c]-p[a])#define N 50

2016-09-29 15:19:30 318

原创 BZOJ 2763 [JLOI2011]飞行路线

分层图记f[i][j]表示在i,且还可以免费j次的最小代价,直接跑类似最短路即可#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define N 10005#define M 50001using namespace std;struct edge{int next,to,v;}e[M<<1];c

2016-09-29 15:04:41 282

原创 HDU 1695 GCD

莫比乌斯反演没啥好说的,挂题解:http://blog.csdn.net/lixuepeng_001/article/details/50577932#include<cstdio>#include<cstring>#include<algorithm>#define ll long long#define N 100005using namespace std;bool notprim

2016-09-29 14:24:47 294

原创 BZOJ 4602 [Sdoi2016]齿轮

爆搜+取对数优化很显然我们可以定一个点,然后DFS下去看有没有矛盾。但是这样会炸精度。于是考虑判断a*b==a*c可以转为判断log(a*b)==log(a*c)也就是log(a)+log(b)==log(a)+log(c)。这样精度就安全了。#include<cstdio>#include<cmath>#include<cstring>#define N 1005#define M 100

2016-09-29 11:52:37 534

原创 BZOJ 3261 最大异或和

可持久化trie说实话,可持久化的数据结构细节就是麻烦- -(其实是我太弱了),我调了差不多两个小时才调出来。。。#include<cstdio>#define N 600005#define D 25using namespace std;struct node{ node *ch[2]; int cnt;}*root[N], nodes[N*40], *null;i

2016-09-28 23:22:59 286

原创 BZOJ 2049 [Sdoi2008]Cave 洞穴勘测

LCT模板题顺便挂一个不错的LCT教程:link-cut trees#include<cstdio>#include<algorithm>#define N 10005using namespace std;struct node{ int fa, ch[2], lazy; }t[N];char s[10];int stk[N], top;void pushdown(int

2016-09-28 18:41:21 335

原创 BZOJ 4011 [HNOI2015]落忆枫音

拓扑图DP对于拓扑图,deg[i]表示i的入度,根为1,答案就是 ∏ni=2deg[i]\prod_{i=2}^{n} deg[i]即除根节点外,每个点都选择一条入边,由于图是DAG,因此一定会形成一个树形图(听说这是朱刘算法的推论?)考虑加完边之后有环怎么办?只要在答案里减去环的贡献即可。如何求环的贡献?当环的边全部被选时,方案数肯定是所有非环上点(除了根)的入度之积。脑补即可证明。附大爷题解:h

2016-09-28 14:24:52 292

原创 BZOJ 2111 [ZJOI2010]Perm 排列计数

组合数+Lucas定理题目可以转化成求1~n排列的小根堆数目,那么对于每一个i位置,他的子树节点个数是确定的,记为f[i],那么有f[i]=C(siz[i-1],siz[i<<1])*f[i<<1]*f[i<<1|1]注意到n可能大于p,套Lucas定理即可【Lucas定理】注意,当且仅当p是质数时才可以用Lucas定理。在不考虑求逆元的情况下,单次时间复杂度O(logpn)O(log_pn)#in

2016-09-28 11:35:11 274

原创 BZOJ 2208 [Jsoi2010]连通数

缩点+bitset+DP先缩点。每一块的答案是他能到达的(包括自己)所有块的siz和自己的siz相乘的和,于是对缩点后的拓扑图进行DP即可。#include<cstdio>#include<queue>#include<bitset>#include<algorithm>#define N 2005using namespace std;bitset<N> f[N];queue<int

2016-09-27 14:50:53 356

原创 BZOJ 1483 [HNOI2009]梦幻布丁

链表+启发式合并黄学长题解(orz):http://hzwer.com/2858.html附: pos[i]表示i颜色(数据中的正确颜色)在链表中存储为pos[i]。那么交换pos[i]和pos[j]就是交换他们存储的颜色。反正最后合成完一定是一个完全的链表,且这个链表是被pos[y]指向的,这样就可以了,复杂度每一次操作均摊logn #include<cstdio>#include<algor

2016-09-27 14:42:02 282

原创 BZOJ 3688 折线统计

线段树维护DP令f[i][j][0/1]表示前i个点,选择j段,最后一段是下降/上升的方案数。f[i][j][0]=∑(f[k][j][0]+f[k][j-1][1]) (k < i且a[k].y>a[i].y)f[i][j][1]=∑(f[k][j][1]+f[k][j-1][0]) (k < i且a[k].y#include<cstdio>#include<algorithm>#define

2016-09-27 14:35:02 391

原创 BZOJ 3170 [Tjoi 2013]松鼠聚会

排序+前缀和+切比雪夫转曼哈顿如果本题给出的是曼哈顿距离,那么我们就可以按X和Y分别排序,求出前缀和,对于每个点O(1)判断找最佳答案。可是切比雪夫距离呢?也可以转化成曼哈顿距离!先引入一个恒等式: max(|a|,|b|)=|a+b2|+|a−b2|max(|a|,|b|)=|\frac{a+b}{2}|+|\frac{a-b}{2}| 可对a,b的正负性分类讨论进行证明切比雪夫距离公式

2016-09-27 14:29:57 301

原创 BZOJ 4236 JOIOJI

遍历统计+mapf[0/1/2]表示到目前为止,I/J/O出现的次数,用一个pair记录(f[2]-f[1],f[1]-f[0]),找到最早的一个位置,使得他们pair相减等于0即可。我原先的想法也是类似的,但我只想到用一些奇怪的模数来搞,没想到用pair记#include<map>#include<cstdio>#include<algorithm>#define N 200005usin

2016-09-27 14:13:10 296

原创 BZOJ 1878 [SDOI2009]HH的项链

离线+排序+树状数组先离线,按右端点排序。 记当前位置之前最后一次出现的数的位置的值为1,这玩意儿可以随位置右移而很方便地更新,询问就是求区间和了,树状数组维护。 #include<cstdio>#include<algorithm>#define lowbit(x) (x&(-x))#define N 50005#define M 200005#define C 1000005usi

2016-09-27 14:06:44 240

原创 BZOJ 1032 [JSOI2007]祖码Zuma

区间DP发现对于连续的相同颜色个数,我们只关心它大于1还是等于1,于是可以把相同颜色的块合起来,记一个size。注意到一个区间[i,j]的消除有两种情况。一是先消除[i,k]再消除[k+1,j],二是消除了[i+1,j-1]之后剩下两边的一样恰好消掉。记f[i][j]表示区间[i,j]全消除需要的最小代价,就可以DP了#include<cstdio>#include<cstring>#inclu

2016-09-27 14:03:33 376

原创 BZOJ 2754 [SCOI2012]喵星球上的点名

AC自动机对每一个询问串建AC自动机,拿每一个名字跑AC自动机,不断在fail指针上统计答案即可。因为字符串总长度有保证,时间复杂度可以近似看成O(LEN)。刚开始比较SB,每一个trie节点都开了一个next[10000],结果MLE了。实际上每个节点根本用不到这么多,可以改成map。做fail指针的时候不用从1扫到10000来找子节点,因为子节点并没有那么多,可以把子节点的编号用vector记录

2016-09-27 13:56:05 348

原创 BZOJ 4195 & UOJ 127 [Noi2015]程序自动分析

并查集出现矛盾当且仅当x1=x2且x1!=x2于是先处理所有等于,把两个数用并查集并起来,对于每一个不等于判断一下就好了NOI为什么会有这种题。。。#include<map>#include<cstdio>#include<cstring>#include<algorithm>#define N 100005using namespace std;int a[N], b[N], c[N]

2016-09-25 15:26:56 335

原创 BZOJ 1854 [Scoi2010]游戏

并查集 或 二分图匹配这题复杂度错误的算法竟然跑得比正解快 错误的算法(1):用装备的两种属性向装备连边,跑二分图匹配即可,注意题目要求是连续攻击,所以一旦匹配不成功就要退出正确的算法(2):把每一个装备考虑成一条边,它的两个属性考虑成边两端点的编号。使用装备相当于删除这条边。于是可以发现如果某连通块图中有环,那么环上的点必定都可以取到。如果是树结构,让编号最大的取不到即可。二分图匹配#includ

2016-09-25 14:48:13 391

原创 BZOJ 2326 [HNOI2011]数学作业

分段递推+矩阵乘法根据模运算的分配律,i表示连接到第几个数,有递推式:f[i]= f[i-1]*(10^log(i))+i mod M构造矩阵进行加速{f[i-1],i-1,1} * { 10^log(i) ,, 0 ,, 0 } { 1 ,,,,,,,,,,,,,,,,,, 1 ,, 0 } { 0 ,,,,,,,,,,,,,,,,,, 1 ,, 1 } (空格没法对齐,强行用逗号对齐)

2016-09-25 14:33:54 239

原创 BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊

分块分为根号n块,对每一个装置,记录它跳出所在块需要的步数和跳出所在块之后到达的点#include<cstdio>#include<cmath>#define N 200005#define SN 1000using namespace std;int k[N], step[N], next[N], n, block, cnt, l[SN], r[SN], belong[N];void

2016-09-25 14:26:35 287

原创 BZOJ 1059 [ZJOI2007]矩阵游戏

二分图匹配可以证明,如果存在n个黑格,且他们互不同行互不同列,就一定有解。相反如果有解,就一定有这样的n个黑格。于是找完美匹配#include<cstdio>#include<cstring>#define N 205using namespace std;struct edge{int next,to;}e[N*N];int ecnt=1;int last[N], mat[N], n;

2016-09-25 14:23:17 236

原创 BZOJ 1088 [SCOI2005]扫雷Mine

暴力枚举或DP如果确定了第一行是否有雷,就可以根据第一行的数字推出第二行,进而第三行。。。于是可以暴力枚举第一行的状态来搞然而我想复杂了,记f[i][sta]表示到第i行,i的前三行的状态为sta的方案数。。。#include<cstdio>#define N 10005int f[N][1<<3], a[N];int main(){ int n; scanf("%d",&n

2016-09-25 14:17:12 231

原创 BZOJ 4034 [HAOI2015]T2

树剖+线段树要能够一次性给子树赋值,可以用DFS序+线段树 要查询点到根的路径和,树剖+线段树 于是用树剖的DFS序建树#include<cstdio>#define N 100005#define ll long longusing namespace std;struct edge{int next,to;}e[N<<1];struct segment_tree{int l, r;

2016-09-25 13:47:58 265

原创 BZOJ 1597 [Usaco2008 Mar]土地购买

斜率优化考虑到如果一个长方形可以被另一个长方形覆盖,那么它就可以直接忽略。然后按x递增y递减的顺序排序,如果取了i和j,那么i和j之间的长方形显然是可以都取的而不会产生新的贡献。于是变成区间DP,然后发现可以斜率优化#include<cstdio>#include<algorithm>#define N 50005#define ll long longusing namespace std

2016-09-25 13:40:32 290

空空如也

空空如也

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

TA关注的人

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