自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

L_0_Forever_LF的专栏

曾是一个OIer

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

原创 网络流的网络流

做了一段时间的网络流,发现只会刷水,稍难的都不会。。。经典模型: BZOJ1070: 每个人拆成若干个点,每辆车和拆出的第i个点连就代表他是这个人倒数第i辆修的车,对答案贡献i*c BZOJ1532: 二分最大流 BZOJ1565: 最大权闭合子图:即点有依赖关系,对于一条边(u,v)(u,v),选了点uu必须点vv,选择一个点集使权值最大,构图:新增源,向正权点连边容量为点权,新增汇,负权点

2016-10-31 17:03:44 613

原创 2339: [HNOI2011]卡农

用二进制表示一个音符的集合,那么可用的集合就有2n−12^n-1种(空集不可用),那么一段音乐所有音符都含偶数个就可以转化成一段二进制的异或和为0 用f[i]f[i]表示nn个音符可用的情况下,分成ii段,考虑顺序,有多少种方案(先算排列数,最后再将答案转成组合数,复杂度是O(n)O(n)的,直接算组合数复杂度O(nlog n)O(nlog\ n)) 设M=2n−1M=2^n-1,得到方程 f

2016-10-31 08:39:01 562

原创 分块小总结

分块这个东西吧,其实它就是个暴力。。。想一些序列、树上问题,想来想去没什么想法了可以分块(树上分块我好像还不会QAQ)分块能处理一些数据结构很难处理或者不能处理的东西(如有间隔的询问、修改),分块也有标记而且也需要支持标记合并分块有很多分块的方法,可以对处理的序列分块,对操作分块,对询问分块等分块很多时候都是对于被完整覆盖的块通过标记或预处理O(1)O(1)修改或查询,没有完整覆盖的暴力重构或查询如

2016-10-28 10:31:41 908 2

原创 BZOJ2821: 作诗(Poetize)

分块,因为没有修改的操作,在线询问,所以可以预处理出s[i][j]表示1到i块j出现的次数,f[i][j]表示i到j块有多少数出现次数为偶数,询问时两端的块暴力做一下就行了 题目卡空间(有毒),把块的大小调一下就没问题了code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<

2016-10-28 09:52:56 727

原创 codechef minxor

分块,每个块开一棵字典树,暴力询问,修改时没有被完整覆盖的块暴力重构code:#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<iostream>#include<algorithm>#define ll long longusing namespace

2016-10-27 20:24:13 394

原创 BZOJ2724: [Violet 6]蒲公英

分块 不带修改的,可以先预处理f[i][j]表示第i块到第j块的众数,s[i][j]表示第1到第i块j出现的次数,每加入一个块,新的众数只可能是原块的众数、新块的众数或新块里的一个数,在新块里找一下就可以了,预处理O(nn−−√)O(n \sqrt n) 询问的话,被完全覆盖的块的众数可以O(1)O(1)知道,然后和求f[i][j]类似,在两端的块内暴力找一下code:#include<set>

2016-10-27 13:37:35 757

原创 codechef Chef and Churu

传送门 将n个函数分块,预处理出每个位置在每个函数里用到多少次,修改时维护每个块内所有函数的和,询问时被完整覆盖的块直接累加和,被部分覆盖的块用树状数组暴力求和 要用unsigned long longcode:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#

2016-10-27 09:32:58 459

原创 BZOJ3509: [CodeChef] COUNTARI

想不到怎么办,分块试一下 块内的可以直接DP出来,块与块之间的,化一下公式发现ai+ak=2aja_i+a_k=2a_j,所以处理第i块,维护1~i-1块每个数出现次数,i+1~n块每个数出现次数,FFT卷积一下,枚举块内的每个值的两倍累加上答案 鉴于FFT常数大,块的大小定为1800左右比较合适code:#include<set>#include<map>#include<deque>#

2016-10-26 22:17:10 970

原创 BZOJ2388: 旅行规划

分块,每一块维护前缀和,观察发现,一次区间加操作对于LL前,RR后的区间里相对的大小关系没有影响,对于[L,R][L,R]里,将每个位置放在平面内作为一个点(i,si)(i,s_i),那么相当于给区间里加了一个斜率。 每个块维护一个凸包(上凸下凸应该都可以,下文以上凸为例),如果这个块被完整覆盖,就打个斜率的标记,否则暴力重构凸包。 询问时在区间里二分,找到一个最大的斜率(u,v)(u,v)使得

2016-10-26 16:16:27 816

原创 BZOJ3343: 教主的魔法

因为询问大于等于一个值的数量,还要支持区间加,考虑操作数不多,可以分块 因为操作数很少,每个块内排序,询问时两端点的块扫一遍,中间的块二分,修改时如果覆盖了整个块就给这个块打个标记,否则暴力修改后重新排序,每次修改&询问复杂度O(n−−√logn−−√)O(\sqrt n log \sqrt n)code:#include<set>#include<map>#include<deque>#i

2016-10-26 09:58:59 930

原创 BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊

分块,每个点处理他跳到下一块时跳到哪个点,需要多少步 询问时一个一个块跳 修改时修改整个块的信息 code:#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<iostream>#include<algorithm>using namespace st

2016-10-25 20:41:12 662

原创 BZOJ2453: 维护队列&2120: 数颜色

pre[i]表示与i颜色相同的上一个在pre[i]的位置,nex[i]表示下一个,那么询问可以转化成问[l,r][l,r]里pre<lpre<l的有多少个 分块,每个块内将pre排序。 询问时扫过去每个块内二分一下<l<l的位置,两端的块在块内扫一遍 将第x位置修改成y时要修改3个pre值,pre[x],pre[nex[x]],x后第一个y颜色的pre,用nex和set可以辅助查找,修改完在自

2016-10-25 20:38:50 584

原创 BZOJ4013: [HNOI2015]实验比较

先并查集合并‘=’,因为所有的Xi互不相同,所以合并完后应该是一个森林,如果出现环就无解。我们新建一个根连向所有入度为0的点,就变成了一棵树,考虑树形DP。因为只要两点不是其中一点是另一点的祖先的关系,他们就可以划‘=’因为大小关系不确定,所以将‘=’连接的看做一块,f[i][j]f[i][j]表示以ii为根的子树分成了jj块转移的话,不合并块就是排列组合问题,如果合并块的话,假设不同子树的ii个块

2016-10-25 09:46:01 693

原创 BZOJ4012: [HNOI2015]开店

询问颜色在[L,R][L,R]区间的点到一个点的距离和,强制在线这题有两个做法,一个是动态树分治我不会,另一个是树剖 算u,vu,v两点在树上的距离我们可以用u,vu,v到根的距离和减2倍LCA(u,v)LCA(u,v)到根的距离和,那对于多个vv的话,可以将每个vv到根的路径上每条边在那个线段树上加一下,∑LCA(u,v)\sum LCA(u,v)就是uu到根上路径上的和。 那么将这个做法推广

2016-10-24 19:40:11 583

原创 BZOJ3992: [SDOI2015]序列统计

先脑补一个DP方程:f[a][b]∗f[c][d]=f[a+c][b∗d Mod m]f[a][b]*f[c][d]=f[a+c][b*d\ Mod\ m] 那么求f[n][x]f[n][x]可以用快速幂求,于是有了一个复杂度为O(n2logn)O(n^2logn)的做法,但是这个复杂度过不了,于是观察一下这个式子,考虑能不能优化。 如果我们能把这个b*d转化成b+d,那么这个式子就可以化成一个

2016-10-24 09:05:00 641

原创 任意模数FFT 板子

Orz myy

2016-10-21 19:16:57 3314 2

原创 NTT板子

NTT很容易爆int

2016-10-21 19:15:55 1009

原创 BZOJ2683: 简单题

这题有个在线版的是BZOJ4066,而且空间只有20MB好像要用KD-tree,然后这题的话就可以离线弄,空间也没什么问题cdq分治+树状数组(为什么我的cdq打的和整体二分一样一样的。。不管了速度不慢就行)首先一个矩阵内的值可以分成4个(1,1)(x,y)(1,1)(x,y)的矩阵容斥一下弄出来,将一个询问分成4个,然后将所有操作+询问按x为第一关键字,时间为第二关键字排序。 二分时间,因为一个

2016-10-21 10:31:31 646

原创 一些小东西

想好了再打程序,切记 静态查错大法好 初始化很重要Floyd: 寻路问题里,n较小时都可以考虑Floyd 因为Floyd寻路的方式,可以通过排序使得路径上点权最大值变成当前点权:例题:BZOJ1774Dijskra+堆优化O(nlogn)O(nlogn)SPFA两个优化: 1:如果当前拓展的点dis<队头的dis,把他放到队头 2:如果当前拓展的点dis<整个队列dis的平均数,把他放到

2016-10-19 08:49:01 429 1

原创 分层图

之前有分层图的题没做,比赛遇到挂了,补一补 例:BZOJ1579 分成0~k层,表示用了多少次更新,每条边分一条连向下一层的边权值为code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#in

2016-10-18 15:06:21 1518

原创 BZOJ4011: [HNOI2015]落忆枫音

Orz PoPoQQQ:http://blog.csdn.net/popoqqq/article/details/45194103用脉络树总数减去不合法的情况(即树上有环的情况),拓扑序DP,注意特判连的边指向1的情况学到了新姿势:线性求逆元 原理: (假设现在要求a的逆元,x=Mod/a,y=Mod%a) ax+y≡0→−ax≡y→a−1≡−x∗y−1ax+y≡0→−ax≡y→a...

2016-10-18 08:23:20 883 2

原创 BZOJ3110: [Zjoi2013]K大数查询

这道题和某题类似:http://blog.csdn.net/l_0_forever_lf/article/details/52839787整体二分,每次二分一个值,因为是求第k大,比二分值大的在[l,r][l,r]区间+1,询问就问这个区间的数,如果数量大于k,说明实际答案大于二分值,下放右区间,否则下放左区间,k减去询问的值(因为后面不会再考虑mid~r的值),把区间加操作也按照权值两边下放,每次

2016-10-17 20:50:10 713

原创 BZOJ1901: Zju2112 Dynamic Rankings

发现还是不怎么会整体二分,学一道模版 将初始的序列的视为将第i个位置改为a[i]的操作,和所有操作放在一起 二分一个值,将所有操作里值不大于二分值的在树状数组里的位置+1,下放到右边,大于的下放到左边,对于询问,如果区间里的数≥k,将这个操作下放到左区间,否则下放到右区间,将k减去询问的值(因为这些左区间的操作以后不会再考虑),然后在树状数组里撤销之前的操作,向下二分code:#include<

2016-10-17 16:37:54 812

原创 BZOJ2109: [Noi2010]Plane 航空管制 解题报告

写完发现我真是想多了,一直觉得nm+n2lognnm+n^2logn过不了,结果轻松过去了2109好像没有这题的第一问呀,不过有没有第一问都差不多…感觉上这题每个数最前的位置不能一起求的,所以考虑一个一个求 如果只求第k个数最前的位置是什么的话,因为题意要求有些航班只能在一些航班之后起飞,所以先建一个拓扑图,但如果是按照位置1~n这样弄,每次在入度为0的点里面不知道选哪个点,因为有后效性(直接选限

2016-10-16 10:57:59 895

原创 BZOJ4010: [HNOI2015]菜肴制作 解题报告

拓扑排序 因为题意要求是i尽量前的情况下i+1尽量前,所以按制作顺序取每次入度为0的最小的出来会错 那么倒着想,如果从后往前制作,反向建图的话,每次取入度为0的编号最大的 (窝不会证,但是想一想感觉是挺对的),最后把顺序倒着输出就可以了 好坑的输出判定,PE了好多次code:#include<set>#include<map>#include<deque>#include<queue>

2016-10-15 15:07:38 621

原创 BZOJ4009: [HNOI2015]接水果 解题报告

题目问两点间的路径上子路径权的第k小,一开始给出能做子路径的路径p[]和其权值有一篇介绍的很详细的题解 http://www.cnblogs.com/mjy0724/p/4447813.html看了思路知道怎么做会打的下面我写的东西都可以不看了窝讲一下个人具体的做法(不会具体怎么做的可以看下)这道题整体二分就是二分一个路径的权值,将当前考虑的矩阵按是否在二分的范围内分类拿出来,像归并排序那样把这个

2016-10-15 10:48:02 1029

原创 BZOJ4008: [HNOI2015]亚瑟王 解题报告

首先想到一种计算答案的方法,即每张牌的伤害×抽中的概率 因为对于每张牌,会影响到他的概率的只有他前面的牌,他后面的牌是否抽中对他没有影响,而一轮一轮过情况很复杂,不妨将r轮视为r个机会,将所有牌和所有机会一起考虑 f[i][j]f[i][j]为前ii张牌,用剩jj次机会的概率 可以得到一个方程: f[i][j]=f[i−1][j]×(1−p[i])j+f[i−1][j+1]×(1−(1−p[

2016-10-14 13:20:31 1450

原创 BZOJ3622: 已经没有什么好害怕的了 解题报告

感觉做完这题已经没有什么题害怕了呢(算了当我没说) 首先安利一个写的很好的题解orz http://www.cnblogs.com/dyllalala/p/3900077.html 写的挺详细的了,但是我总要写点什么吧,于是再解释一下做法…….首先可以把题意转化一下,如果(n+k)mod2=1(n+k)mod2=1那肯定是没有满足要求的情况了,如果不为1,问题就是要求糖果大于药片的恰好有m=(

2016-10-13 10:58:50 919

原创 BZOJ3620: 似乎在梦中见过的样子 解题报告

这题一直没想出来,后来发现O(n2)O(n^2)能过…….SA+n2SA+n^2枚举 枚举一个左端点i,处理一下前缀i和每个前缀的height值,然后往右枚举右端点j,判一下height值是不是>k,如果是的话,把不覆盖中间全部区间的所有方案加入答案,注意不同j的答案可能重复,所以先存到一个数组里,弄一下前缀和,扫完j扫一遍数组就好了code:#include<set>#include<map>

2016-10-11 20:45:44 918

原创 BZOJ4444: [Scoi2015]国旗计划 解题报告

DescriptionA国正在开展一项伟大的计划——国旗计划。这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈。这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边防战上作为这项计划的候选人。 A国幅员辽阔,边境线上设有M个边防站,顺时针编号1至M。每名边防战士常驻两个边防站,并且善于在这两个边防站之间长途奔袭,我们称这两个边防站之间的路程是这个边防战士的奔袭区间

2016-10-10 20:51:44 1049

原创 BZOJ4245: [ONTAK2015]OR-XOR 解题报告

Description给定一个长度为n的序列a[1],a[2],…,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or … or c[m]。请求出总费用的最小值。 Input第一行包含两个正整数n,m(1<=m<=n<=500000),分别表示序列的长度和需要划分的段数。 第一行包含n个整数,其中第i个数为ai。 Ou

2016-10-10 20:35:19 715

原创 BZOJ4000: [TJOI2015]棋盘 解题报告

题解Description 1<=N<=10^6,1<=M<=6吐槽真的不得不吐槽这个题意,本来看数据范围觉得是矩乘,突然发现维护2行矩阵时间吃不下,想不到去看题解结果woc题目里给的攻击范围的矩阵第一行是第0行,棋子自己的位置其实是矩阵的第2行题解知道题意里说的攻击范围的矩阵3×p3×p指的是00~22行后就没什么好说的了,矩乘 先按状压做,先处理一下状态之间的转移,然后矩乘一下code:

2016-10-10 20:23:40 504

原创 BZOJ3998: [TJOI2015]弦论 解题报告

Description对于一个给定长度为N的字符串,求它的第K小子串是什么。Input第一行是一个仅由小写英文字母构成的字符串S第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个。T=1则表示不同位置的相同子串算作多个。K的意义如题所述。题解:这里介绍SA的做法(相对SAM会慢一些) 先处理出有多少个不相同的子串,对于T=0的询问,直接找第k小子串即可 对于T=1的询问,二分答案是第

2016-10-10 13:47:30 546

原创 BZOJ3997: [TJOI2015]组合数学 解题报告

Description给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走。问至少走多少次才能将财宝捡完。此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完。题解貌似有个定理说在一个DAG中,最小链覆盖=最大独立集(这题不知道这个也行) 观察这个网格图,因为每次只能向右或向下走,所以如果一对点,一个在另一个的左下方,那

2016-10-10 13:32:37 929

原创 BZOJ3996: [TJOI2015]线性代数 解题报告

Description给出一个N*N的矩阵B和一个1*N的矩阵C。求出一个1*N的01矩阵A.使得D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D题解可以化简一下公式 (A∗B−C)∗AT=A∗B∗AT−C∗AT=∑ai∗aj∗bi,j−∑ai∗ci(A*B-C)*AT=A*B*AT-C*AT=∑a_i*a_j*b_{i,j}-∑a_i*c_i 所以问题可以化为一些物品,选物品ii需

2016-10-10 13:25:51 1124

原创 hdu5831 Rikka with Parenthesis II 2016 Multi-University Training Contest 8 解题报告

日常吐槽可跳过送分的一道贪心我错这么多遍还看题解我是不是可以退役了…………….题意给你一个括号序列,必须交换两个不同的括号,问有没有一种交换方法使得交换后的序列是一个合法的括号序列题解贪心 将(看作+1,)看作-1,那么一个合法的序列,任意一个位置的前缀和都要是一个非负数,整个序列的和必须是0,那么考虑一次有意义的交换,只会是前面的-1和后面+1交换,那么在这两个数之间的前缀和+2,其他不受影响,

2016-10-03 19:09:08 695

原创 BZOJ4443: [Scoi2015]小凸玩矩阵 解题报告

日常吐槽,可跳过这部分这道题第一眼就觉得要二分一下答案,然后…然后我发现我不会……..冷静下来,想了一会,感觉可以二分后可以贪心一下,然后就欢快的打了起来 打完过了样例,然后WA了(不对呀我这么正确的 正解怎么会WA呢) 打了个对拍死活拍不出来,好吧我弱我看题解唉呀我怎么没想到二分匹配…….(但我真的觉得我原来的做法没错的) 没救了吐槽结束下面是题解二分一下第kk大,然后二分匹配一下,不大于二

2016-10-02 22:29:36 901

原创 BZOJ3507: [Cqoi2014]通配符匹配 解题报告

日常吐槽部分可以跳过这题又坑了蒟蒻一下午,表示很不爽(自己弱能怪谁) 看完题想了一会一直觉得是很高级的做法,自己肯定不会了,搜了题解并不能看懂在讲什么,去问大神,Claris表示这不是 贪心+hash 就能搞定的题吗(为什么我连贪心都没想到啊还有怎么hash匹配并不会) 敲完怎么拍都拍不出错,一个小时后拍出来结果发现一个判 ? 的地方下标没更新,改了就A了。 但是为什么我注释掉这个判 ? 的语

2016-10-01 18:09:47 1602

空空如也

空空如也

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

TA关注的人

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