自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ws_fqk

AFO

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

原创 1176: [Balkan2007]Mokia/2683: 简单题 CDQ分治+树状数组

论文题,简要说一下做法吧。 用solve(l,r)solve(l,r)表示对于每一个queryquery操作ii,将[l..i−1][l..i-1]中的addadd操作在ii的矩形范围内的都累加起来,要求的是solve(1,n)solve(1,n)。 那么对于solve(l,r)solve(l,r),依旧是分治处理solve(l,mid)solve(l,mid)和solve(mid+1,r)so

2016-02-29 20:12:21 649

原创 1492: [NOI2007]货币兑换Cash DP+斜率优化+splay维护凸包/CDQ分治

似乎两个月之前我写过一次这题写挂了? 《多年的心头大恨终于解决了系列》 我们可以发现,存在最优解满足每次将全部的钱买了券或每次将全部的券卖成钱,因为有利益我们要尽可能的去获得,有亏损就一点也不要碰。 我们用fif_i表示到ii天时的最大收益,令xi,yix_i,y_i分别表示第ii天购买AA券和BB券的数量。则如果将第ii天的收益全部买成券,那么满足 fi=Ai∗xi+Bi∗yif_i=A_

2016-02-29 17:02:58 874

原创 1010: [HNOI2008]玩具装箱toy DP+斜率优化+决策单调性

好久没做斜率优化辣,突然发现Page1上有一道斜率优化的裸题,借此来回顾一下。首先我们可以DP,令fif_i表示前ii个玩具装箱花费的最小费用。 O(n2)O(n^2)的DP显然: fi=min{fj+(i−j−1+∑k=j+1ick−L)2}f_i=min\{f_j+(i-j-1+\sum_{k=j+1}^i c_k-L)^2\} 我们维护cic_i的前缀和sumisum_i,上式转化为

2016-02-29 09:41:12 545

原创 1044: [HAOI2008]木棍分割 二分答案+DP+前缀和优化

感觉这是道比较经典的题目了吧。 第一问二分答案暴力判一下,记为ansans。 第二问令fi,jf_{i,j}表示前ii个分成jj段的方案数,那么fi,j=∑si−sk<=ansfk,j−1f_{i,j}=\sum_{s_i-s_k<=ans} f_{k,j-1},其中s_i表示lil_i的前缀和。那么我们发现jj这一维可以滚动,且kk是单调的,所以我们可以用前缀和优化fk,j−1f_{k,j-1

2016-02-29 08:16:27 443

原创 4069: [Apio2015]巴厘岛的雕塑 DP+按位贪心

去年的我对位运算一无所知。。所以在考场上直接没敢看题。。之后据说搜索有分,错的DP有分。我的内心是崩溃的。。然而就算看了题还是什么都不会写。考虑按位贪心,从高位到低位枚举,用fi,jf_{i,j}表示前ii个数分成jj段且保证满足已经枚举过的位的答案。 然后O(n3)O(n^3)就可以轻松过点前44个SubtaskSubtask。 对于第55个SubtaskSubtask,满足A=1A=1,所以

2016-02-28 17:22:27 708

原创 2111: [ZJOI2010]Perm 排列计数 DP+组合数学

fif_i表示ii个数组成的小根堆的种类,sizeisize_i表示以ii为根的小根堆的结点个数,令i<<1,i<<1|1i<<1,i<<1|1分别表示堆的左右儿子,则有: fi=Csizei<<1sizei−1fi<<1fi<<1|1f_i=C_{size_i-1}^{size_i<<1}f_{i<<1}f_{i<<1|1}#include<iostream>#include<cstdio>

2016-02-28 15:51:27 408

原创 4084: [Sdoi2015]bigyration hash+map

60分暴力。。BZOJ卡过去了。 我们先确定一个长串,那么总串的一半就确定了,然后把短串hash后放入map,枚举长串的断点放进去匹配,如果匹配成功就统计答案。#include<iostream>#include<cstdio>#include<cstring>#include<map>#define base 233#define U unsigned int#define N 40

2016-02-28 15:24:44 418

原创 3233: [Ahoi2013]找硬币 线性筛+DP

人太弱了什么题也不会。。。用fif_i表示当前最大面值的硬币为ii,零头所需的硬币数量的最小值。 那么有fj=min{fi+∑nk=1⌊ak mod ji⌋}(i∣j)f_j=min\{f_i+\sum_{k=1}^n \lfloor \frac {a_k \ mod \ j}{i} \rfloor\}(i\mid j) 则有ans=min{fi+∑nk=1⌊aki⌋}ans=min\{f_i+

2016-02-28 11:11:52 405

原创 4321: queue2 思路题 DP

神题。。不会设计状态啊。考虑用fi,j,kf_{i,j,k}表示前ii个人,有jj对不合法,第ii个人和第i−1i-1个人是否靠在一起,k=1k=1表示靠在一起k=0k=0表示没靠在一起。 然后就考虑插入第i+1i+1个人的时候有哪些情况。 画画图写出递推式就好了。。重点还是设计状态,设计出状态来就好说了。 不要定势思维以位置为阶段,应该以人的数量为阶段。求合法的解我们可以通过求不合法的情况最

2016-02-28 09:17:35 554

原创 4282: 慎二的随机数列 DP

最近怎么什么傻逼题都要WA一遍,感觉要get“省选药丸”了。 可以发现存在一个最优解使得所有的未知数都在里面,因为如果有一个不在里面,那可以通过替换来得到最优解。 那么把每个数都减去他前面未知数的个数,做LIS,最后答案再加上位置数的个数就可以了。 为何upper_bound WA了?我写的姿势不对?#include<iostream>#include<cstdio>#include<al

2016-02-28 08:32:45 341

原创 2802: [Poi2012]Warehouse Store 贪心 priority_queue

贪心。每次尽量往里放,否则踢出之前b[i]b[i]最大的放进当前的。#include<iostream>#include<cstdio>#include<queue>#include<vector>#define N 250005#define ll long long#define pa pair<int,int>using namespace std;int a[N],b[N];

2016-02-28 07:58:28 339

原创 4264: 小C找朋友 hash

对边集进行hash,然后分两人是朋友和两人不是朋友讨论。 犯了谜之错误: ans=ans+(ll)((now−i+1)∗(now−i)/2)ans=ans+(ll)((now-i+1)*(now-i)/2)会WA。 ans=ans+(ll)(now−i+1)∗(now−i)/2ans=ans+(ll)(now-i+1)*(now-i)/2会AC。#include<iostream>#incl

2016-02-28 06:27:57 320

原创 3551: [ONTAK2010]Peaks加强版 kruskal重构树+dfs序+主席树

我的内心是崩溃的 尼玛bzoj题面样例都是同3545,然后我做完就顺手交了3545,然后就谜之RE调了一晚上,调了一晚上才突然发现!!!!!这个题还是比较神的,膜拜popoqqq大爷 我们用点表示边,并且与这条边所连的两个点所属集合的顶部连边(并查集维护),于是就得到了一棵树。 这样得到的一棵树有一些性质: 1.二叉树(好吧这题意义不大) 2.原树与新树两点间路径上边权(点权)的最大

2016-02-27 20:47:46 591

原创 3545: [ONTAK2010]Peaks 启发式合并treap 离线处理

《多年的心头大恨终于解决了系列》 一个半月前写的splay挂了。。于是来写了一发treap,好慢。。 离线随便搞。 听说有强制在线版本?#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#define N 100005#define M 500005using namespace std;i

2016-02-27 14:52:04 445

原创 3439: Kpm的MC密码 trie+主席树

一开始写的fail树,然后沿着fail指针反向dfs。结果TLE啦。 看了一下题解,是把后缀相同转化为前缀相同,然后在trie树上有相同前缀的肯定在同一棵子树中,按dfs序建主席树就行啦。 其实在fail树上建主席树也是可以的。。一开始傻逼没有想到。。懒得改了。。 注意有相同的子串!fail树暴力#include<iostream>#include<cstdio>#include<algo

2016-02-27 13:48:42 444

原创 3207: 花神的嘲讽计划Ⅰ 主席树+hash

由于长度一定,我们直接hash一下然后可持久化线段树判一下是否存在就好啦。 unsigned int被卡 unsigned long long过了#include<iostream>#include<cstdio>#include<algorithm>#define U unsigned int#define base 233#define N 500005using namespac

2016-02-27 08:06:38 328

原创 3910: 火车 LCA+并查集

在树上走显然是求LCA,然后每次走完把端点到LCA路径上的点都用并查集合并,之后如果判断两点所属集合相等说明已经走过。 《倍增被链剖虐成狗系列》#include<iostream>#include<cstdio>#define N 500005#define ll long long using namespace std;int n,m,now,cnt;ll ans;int hea

2016-02-27 07:01:14 501

原创 4298: [ONTAK2015]Bajtocja 启发式合并 hash

好题。好像get了hash的新姿势。我好弱啊。我们可以用fi,jf_{i,j}表示第ii个图中点jj所属联通块的编号,初始fi,j=jf_{i,j}=j,然后每次连边时,我们可以进行启发式合并,合并的复杂度为O(dnlogn)O(dnlogn)。 如果两个点在所有图中的所属联通块编号都相同,则这两个点是联通的,我们可以hashhash来判一下,令hashihash_i表示点ii的hashhash值

2016-02-26 21:09:05 581

原创 4281: [ONTAK2015]Związek Harcerstwa Bajtockiego 倍增LCA

水一水#include<iostream>#include<cstdio>#define N 1000005using namespace std;int n,k,now,cnt;int head[N],next[N<<1],list[N<<1];int deep[N],fa[N][21];inline int read(){ int a=0,f=1; char c=getc

2016-02-26 18:50:42 407

原创 4275: [ONTAK2015]Badania naukowe DP

考虑把C串放到A,B串中,如果匹配成功,则从两个端点向两边做LCS,就是答案了。 详细的说一下: 用fi,jf_{i,j}表示A[1..i],B[1..j]A[1..i],B[1..j]的LCSLCS,用gi,jg_{i,j}表示A[i..n],B[j..m]A[i..n],B[j..m]的LCSLCS。 用did_i表示AA串中从ii开始匹配成功的最后端点。 用eie_i表示BB串中从ii

2016-02-26 17:26:33 406

原创 4276: [ONTAK2015]Bajtman i Okrągły Robin 费用流+线段树优化建图/贪心

费用流作法是最暴力最显然的吧。。 一眼建图题,所以裸的是水不过去的。。 朴素建图:用xix_i表示每个强盗,用yiy_i表示区间[i,i+1][i,i+1]。 (S,xi,1,ci)(S,x_i,1,c_i) (xi,yi(ai<=yi<bi),1,0)(x_i,y_i(a_i<=y_i<b_i),1,0) (yi,T,1,0)(y_i,T,1,0) 然后这样是过不了的。 我们发现每次

2016-02-26 16:52:57 663

原创 4145: [AMPPZ2014]The Prices 状压DP

裸状压DP,令fi,jf_{i,j}表示前ii个商店物品购买状态为jj的最小值,每次在每个商店里跑背包。#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,m,d[105],c[105][17];int f[105][1<<16];inline int read(){ int

2016-02-26 14:19:18 399

原创 1879: [Sdoi2009]Bill的挑战 状压DP

还是状压DP。 考虑用fi,jf_{i,j}表示当前枚举到第ii位,匹配状态为jj的方案数。 枚举2626个字母,求出当前位放每个字母的匹配状态tmptmp,然后转移: fi,j and tmp+=fi−1,jf_{i,j \ and \ tmp}+=f_{i-1,j}然后就好了。开始写残了,主要部分是这样写的: for (int i=2;i<=len;i++)

2016-02-26 11:03:08 518

原创 XJOI #8T1 炮兵阵地 状压DP

可以发现每行的状态仅和上面两行有关。我们可以状压,考虑用fi,j,kf_{i,j,k}表示当前是第ii行,且第ii行的状态为jj,第i−1i-1行的状态为kk。那么转移: fi,j,k=max(fi−1,k,p+ccj)f_{i,j,k}=max(f_{i-1,k,p}+cc_j) 其中ccjcc_j表示状态jj的1的个数。 如何保证转移是合法的呢,就是要保证j and k=0,j and p

2016-02-26 10:18:48 390

原创 1072: [SCOI2007]排列perm 状压DP

我太弱了。。据说是状压裸题。。我还是不会做。。。T T考虑用fi,jf_{i,j}表示当前状态为ii,且mod d=jmod \ d=j的方案数。 若存在kk使得(1<<(k−1)) and i==0(1<<(k-1)) \ and \ i==0就可以转移。 最后全排列去重#include<iostream>#include<cstdio>#include<cstring>using na

2016-02-25 20:40:39 460

原创 1294: [SCOI2009]围豆豆Bean 射线法+状压DP+spfa

首先说一下什么叫射线法。 射线法就是从一个点向右做一条射线,如果与路线的交点个数为奇数,则这个点一定被围起来了。 举几个例子: 这是有一个交点的情况。 这是有三个交点的情况。 这是有两个交点的情况,如图所示点没有被围起来。但还有一种情况,在偶数个交点时也有可能被围起来。如下图所示: 也就是说,如果两条相交的边同向,也有可能会包围点。 范围较小,考虑状压DP,fi,j,k

2016-02-25 19:28:19 1029

原创 HDU 4333:Revolving Digits KMP+扩展KMP

扩展KMP的姿势 扩展KMP可以在O(n)O(n)的复杂度内求这样一个问题: 给定两个串S,TS,T,设n=|S|,m=|T|n=|S|,m=|T|求SS中的每个后缀与TT的最长公共前缀,用extend[i]extend[i]表示。即extend[i]=LCP(S[i..n],T)extend[i]=LCP(S[i..n],T) 算法过程: 类似的,我们令next[i]next[i]表示TT

2016-02-25 15:44:53 535

原创 2631: tree LCT

傻逼题无脑码了20几分钟就码完啦= = 结果顺手把y打成了x就WA了一发。。。 unsigned int 比 long long快很多啊#include<iostream>#include<cstdio>#define ll unsigned int#define P 51061#define N 100005using namespace std;int n,Q;int rev[

2016-02-25 10:07:06 725 4

原创 1798: [Ahoi2009]Seq 维护序列seq 线段树

注意标记的优先级问题。#include<iostream>#include<cstdio>#define ll long long #define N 100005using namespace std;int n,m,P;int a[N];int l[N<<2],r[N<<2];ll sum[N<<2],tag_add[N<<2],tag_mul[N<<2];inline int

2016-02-25 09:18:12 451

原创 4318: OSU! 概率与期望DP

因为(x+1)3−x3=3x3+3x+1,(x+1)2−x2=2x+1(x+1)^3-x^3=3x^3+3x+1,(x+1)^2-x^2=2x+1 所以维护一个33次方的期望可以通过维护一个22次方的期望和一个11次方的期望,而维护一个22次方的期望可以通过维护一个11次方的期望。分别维护就好了。 期望的平方不等于平方的期望!#include<iostream>#include<cstdio>

2016-02-25 08:11:14 682

原创 3029: 守卫者的挑战 概率与期望DP

三维DP,方程很好写: 令fi,j,kf_{i,j,k}表示挑战完前i个,赢了j次,当前收益为k的概率。 则fi,j,k=fi−1,j−1,k−si∗pi+fi−1,j,k∗(1−pi)f_{i,j,k}=f_{i-1,j-1,k-s_i}*p_i+f_{i-1,j,k}*(1-p_i) 我们可以发现,当k>nk>n时这个状态并没有什么意义,因为此时无论之后怎样装都不会使k<0k<0,所以直接

2016-02-25 07:08:59 366

原创 3566: [SHOI2014]概率充电器 概率与期望+树形DP

神题ORZ。%%%18357 我们用fi,0f_{i,0}来表示ii的子树(含ii)给ii充不上电的概率,用fi,1f_{i,1}表示ii的父亲给ii充不上电的概率。 用hih_i表示ii对其父亲fafa的贡献,所以有hi=fi,0+(1−fi,0)∗(1−p(fa−>i))h_i=f_{i,0}+(1-f_{i,0})*(1-p(fa->i)) 那么我们dfsdfs一遍可以求出所有的fi,0

2016-02-24 21:14:51 951

原创 2337: [HNOI2011]XOR和路径 高斯消元解期望方程 概率与期望DP

居然没被卡精度,高斯消元居然一边写对了,sb错误居然没犯。。 如此傻逼的我也能1A真是感动。因为要求的是xorxor的期望,我们可以按位计算每位的期望再相加。 考虑每一位,我们令d[i]d[i]表示点ii的出度,我们令f[i]f[i]表示从ii走到nn这一位的xorxor和为11的概率,那么有 f[i]=∑j=1d[i]f[j]d[i](edge(i,j)=0),1−f[j]d[i](edge

2016-02-24 19:24:13 381

原创 3673: 可持久化并查集 by zky 主席树 可持久化数组

和3674一个做法,懒得做3674啦qwq。 并查集的fafa数组,每次合并时只会改变一个点的值,所以可持久化的时候我们可以用主席树来做。很好yy吧。。#include<iostream>#include<cstdio>#include<queue>#include<set>#include<map>#include<algorithm>#define ll long long #d

2016-02-24 18:22:03 307

原创 3110: [Zjoi2013]K大数查询 线段树套线段树 标记永久化

外层权值线段树,内层区间线段树。 每次给一个区间[l,r][l,r]增加一个数xx,我们就把权值线段树中区间包含xx的节点的区间线段树上与[l,r][l,r]有关的节点加上这个节点代表的区间的长度。(卧槽好长的一句话慢慢理解。。。) 然后每次查询时类似二分答案,注意是第KK大不少第KK小! 注意标记永久化。#include<iostream>#include<cstdio>#include

2016-02-24 15:20:32 668

原创 2796: [Poi2012]Fibonacci Representation 思路题 map+记忆化搜索

POI的题果然神。。不会做啊。。令f(n)f(n)表示斐波那契数列的第nn项,则有: f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2) f(n+1)=f(n)+f(n−1)f(n+1)=f(n)+f(n-1) 联立得: 2f(n)=f(n+1)+f(n−2)2f(n)=f(n+1)+f(n-2) 所以如果一个数出现了两次,可以把它转化为两个不同的数,所以总存在一个合

2016-02-24 10:44:40 714

原创 2754: [SCOI2012]喵星球上的点名 AC自动机+map

AC自动机上暴力跑匹配就好,字符集比较大用map。#include<iostream>#include<cstdio>#include<map>#include<vector>#include<cstring>#define N 100005using namespace std;int n,m,cnt;int ans1[N],ans2[N];bool vis[N],mark[N>

2016-02-23 21:28:31 458

原创 2300: [HAOI2011]防线修建 set维护凸包

从前写货币兑换的时候,写的splay维护凸包,没调出来。 后来写防线修建,我用了set维护凸包,A啦。 从前写永无乡的时候,写的splay启发式合并,没调出来。 后来写dispatching,我用了trep启发式合并,A啦。 我再也不相信splay了T T。以上纯属一个蒟蒻的扯淡。#include<iostream>#include<cstdio>#include<set>#inclu

2016-02-23 15:19:51 481

原创 2783: [JLOI2012]树 set

用set维护前缀和,每次在set中查找当前的前缀和sum−Ssum-S,如果存在则ans+1ans+1。#include<iostream>#include<cstdio>#include<queue>#include<set>#include<algorithm>#define ll long long using namespace std;int n,S,cnt,ans;int

2016-02-23 10:36:30 297

原创 1058: [ZJOI2007]报表统计 set+map+priority_queue

对于全局差值,用一个set来维护,用priority_queue来维护最小值。 用两个数组记录每个位置的起点和终点的值,对于相邻差值,用map来维护是否出现过,用set来维护最小值。#include<iostream>#include<cstdio>#include<queue>#include<set>#include<map>#include<algorithm>#define i

2016-02-23 09:57:55 296

空空如也

空空如也

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

TA关注的人

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