![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
BZOJ
L_0_Forever_LF
一个热爱OI的OIer
展开
-
BZOJ大视野 1088: [SCOI2005]扫雷Mine 解题报告
这个算比较水的题了,直接模拟原创 2015-02-03 14:56:03 · 1454 阅读 · 0 评论 -
BZOJ 大视野 2761: [JLOI2011]不重复数字 解题报告
我的方法860ms对原序列离散化, DY[i] 代表离散化的值i对应的原数for 一遍原序列,二分找它的离散化值,这是就可以用bool数组了注意有负数#include#include#include#includeusing namespace std;int a[60000],b[60000];int DY[60000],k;bool v[60000]; i原创 2015-02-02 15:24:06 · 1688 阅读 · 0 评论 -
BZOJ大视野 1083: [SCOI2005]繁忙的都市 解题报告
二分+最小生成树原创 2015-02-20 19:26:18 · 1075 阅读 · 0 评论 -
BZOJ大视野 2190: [SDOI2008]仪仗队
经过观察,发现一个规律,n>2时无视原图第一列第n行,剩下一个(n-1)*(n-1)的矩阵,m=n-1剩下的图中,1——m列,m到1行,每列、行可见的数量为 所以用到 欧拉函数code:/************************************************************** Problem: 2190 User: licha原创 2015-02-07 09:57:46 · 866 阅读 · 0 评论 -
BZOJ大视野 2748: [HAOI2012]音量调节 解题报告
硬模拟,暴力+剪枝原创 2015-02-24 19:20:49 · 828 阅读 · 0 评论 -
BZOJ4003 [JLOI2015]城池攻占 解题报告
题目是中文的,也不难理解,懒惰的我就不写大致题意了题解: DFS + 左偏树(可并堆)从根1 DFS下去,到一个节点,先处理完他的所有孩子,然后将孩子节点的左偏树和攻击这个节点的骑士的左偏树合并在一起,小根堆,然后判堆顶的值是不是比这个节点的防御值小,是的话就删掉,维护这个节点和堆顶骑士的答案,直到堆空了或者堆顶的值大于这个节点的防御值,对于攻占这个节点后战斗力的变化,打个原创 2016-09-04 22:06:39 · 793 阅读 · 0 评论 -
BZOJ2809 [Apio2012]dispatching 解题报告
题目是中文的就不给题意了~题解: 忍者组织可以看成一棵树,根是master,题意其实就是要在找到的点的权值和不超过给定的M的情况下,在一棵子树上找尽量多的点使得点的数量×子树的根的L最大,求这个最大值。DFS,对于一个结点,先算完在他孩子的子树找点的最大值,在将他的孩子找到的点合并,如果权值和超过了M,就删掉最大的点,不断操作直到和小于M,然后计算这棵子树原创 2016-09-03 15:05:35 · 848 阅读 · 0 评论 -
BZOJ 1367 [Baltic2004]sequence 解题报告
这题在 CF Round #371 C题 又出了一次,,数据还是这题数据的弱化版,那题n^2的DP可以过,BZOJ上好像还有一题一样的,数据也是弱化的好像,三倍经验。。。题解:左偏树这题的话,是黄源河关于左偏树的那个东西的例题首先假设求的序列不是严格递增,而是非递减,即 z1 考虑一个区间( l,r ),如果区间里的序列 tl 如果区间里的序列原创 2016-09-19 22:36:21 · 987 阅读 · 0 评论 -
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 · 1140 阅读 · 0 评论 -
BZOJ3997: [TJOI2015]组合数学 解题报告
Description给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走。问至少走多少次才能将财宝捡完。此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完。题解貌似有个定理说在一个DAG中,最小链覆盖=最大独立集(这题不知道这个也行) 观察这个网格图,因为每次只能向右或向下走,所以如果一对点,一个在另一个的左下方,那原创 2016-10-10 13:32:37 · 937 阅读 · 0 评论 -
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 · 553 阅读 · 0 评论 -
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 · 509 阅读 · 0 评论 -
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 · 731 阅读 · 0 评论 -
BZOJ4444: [Scoi2015]国旗计划 解题报告
DescriptionA国正在开展一项伟大的计划——国旗计划。这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈。这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边防战上作为这项计划的候选人。 A国幅员辽阔,边境线上设有M个边防站,顺时针编号1至M。每名边防战士常驻两个边防站,并且善于在这两个边防站之间长途奔袭,我们称这两个边防站之间的路程是这个边防战士的奔袭区间原创 2016-10-10 20:51:44 · 1060 阅读 · 0 评论 -
BZOJ大视野 1085: [SCOI2005]骑士精神
深搜吧原创 2015-02-04 14:22:23 · 1289 阅读 · 0 评论 -
BZOJ大视野 1054: [HAOI2008]移动玩具 解题报告
宽搜,二进制判重原创 2015-02-06 09:55:50 · 1101 阅读 · 0 评论 -
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 · 929 阅读 · 0 评论 -
BZOJ2219: 数论之神
原来BSGS是可以省掉那个log的…这题要分类讨论,用到几个重要的结论(并不是很能理解这些结论) 1:中国剩余定理的推论:几个模数互质的同余方程组合起来,解的个数是各方程解的个数的乘积 2:拓展欧几里得的推论:Ax≡B(mod C)Ax\equiv B (mod\ C),d=gcd(A,C)d=gcd(A,C),若d|Bd|B则方程有解,解的数量为dd模数不为质数时把模数分解质因数,拆分成多个方原创 2016-11-03 10:25:15 · 738 阅读 · 0 评论 -
BZOJ4009: [HNOI2015]接水果 解题报告
题目问两点间的路径上子路径权的第k小,一开始给出能做子路径的路径p[]和其权值有一篇介绍的很详细的题解 http://www.cnblogs.com/mjy0724/p/4447813.html看了思路知道怎么做会打的下面我写的东西都可以不看了窝讲一下个人具体的做法(不会具体怎么做的可以看下)这道题整体二分就是二分一个路径的权值,将当前考虑的矩阵按是否在二分的范围内分类拿出来,像归并排序那样把这个原创 2016-10-15 10:48:02 · 1037 阅读 · 0 评论 -
BZOJ2109: [Noi2010]Plane 航空管制 解题报告
写完发现我真是想多了,一直觉得nm+n2lognnm+n^2logn过不了,结果轻松过去了2109好像没有这题的第一问呀,不过有没有第一问都差不多…感觉上这题每个数最前的位置不能一起求的,所以考虑一个一个求 如果只求第k个数最前的位置是什么的话,因为题意要求有些航班只能在一些航班之后起飞,所以先建一个拓扑图,但如果是按照位置1~n这样弄,每次在入度为0的点里面不知道选哪个点,因为有后效性(直接选限原创 2016-10-16 10:57:59 · 899 阅读 · 0 评论 -
BZOJ3309: DZY Loves Math
先尝试化一下题目给的式子 ∑ni=1∑mj=1f(gcd(i,j))−>\sum_{i=1}^n\sum_{j=1}^mf(gcd(i,j))-> ∑df(d)∑⌊n/d⌋i=1∑⌊m/d⌋j=1,gcd(i,j)=11 −>\sum_df(d)\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1,gcd(i,j)=1}^{\lfloor m/d\rfloor}1 \原创 2016-11-03 14:01:43 · 488 阅读 · 0 评论 -
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 · 933 阅读 · 0 评论 -
BZOJ3462: DZY Loves Math II
首先我们要对着题目多看几遍,会发现,题目要求的质数序列里面的数一定都是SS的质因数! 然后再想想,会发现如果SS有平方因子时一定无解(这些质数的lcmlcm不可能为SS) 那么问题就转化成了给一些质数,每种可以用若干次(至少一次),求和为n的有几种 把n减去每个质因子就能去掉至少一次的限制 考虑质因子个数,用计算器算一下易知是≤7的 易知这道题是要DP的,但是n很大,101810^{18}原创 2016-11-03 20:30:12 · 928 阅读 · 0 评论 -
BZOJ3930: [CQOI2015]选数
差不多是条咸鱼了…………一开始对着题目yy了一个貌似很正确,复杂度不会算的搜索,想了想不是很敢打,往DP想,然后想出了一个看起来很正确的DP,然后挂了…. 那想容斥咯………..不会……… 那试试反演咯…………..还是不会……… 那我到底会什么………….. 看题解好像还是会的这题做法好多的样子,主要是两类,一类是反演,Orz PoPoQQQ μμ的前缀和处理窝看不懂…………还有一类是容斥,因为原创 2016-11-04 08:52:25 · 860 阅读 · 0 评论 -
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 · 590 阅读 · 0 评论 -
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 · 669 阅读 · 0 评论 -
BZOJ4010: [HNOI2015]菜肴制作 解题报告
拓扑排序 因为题意要求是i尽量前的情况下i+1尽量前,所以按制作顺序取每次入度为0的最小的出来会错 那么倒着想,如果从后往前制作,反向建图的话,每次取入度为0的编号最大的 (窝不会证,但是想一想感觉是挺对的),最后把顺序倒着输出就可以了 好坑的输出判定,PE了好多次code:#include<set>#include<map>#include<deque>#include<queue>原创 2016-10-15 15:07:38 · 625 阅读 · 0 评论 -
BZOJ3343: 教主的魔法
因为询问大于等于一个值的数量,还要支持区间加,考虑操作数不多,可以分块 因为操作数很少,每个块内排序,询问时两端点的块扫一遍,中间的块二分,修改时如果覆盖了整个块就给这个块打个标记,否则暴力修改后重新排序,每次修改&询问复杂度O(n−−√logn−−√)O(\sqrt n log \sqrt n)code:#include<set>#include<map>#include<deque>#i原创 2016-10-26 09:58:59 · 939 阅读 · 0 评论 -
BZOJ2388: 旅行规划
分块,每一块维护前缀和,观察发现,一次区间加操作对于LL前,RR后的区间里相对的大小关系没有影响,对于[L,R][L,R]里,将每个位置放在平面内作为一个点(i,si)(i,s_i),那么相当于给区间里加了一个斜率。 每个块维护一个凸包(上凸下凸应该都可以,下文以上凸为例),如果这个块被完整覆盖,就打个斜率的标记,否则暴力重构凸包。 询问时在区间里二分,找到一个最大的斜率(u,v)(u,v)使得原创 2016-10-26 16:16:27 · 820 阅读 · 0 评论 -
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 · 981 阅读 · 0 评论 -
BZOJ3507: [Cqoi2014]通配符匹配 解题报告
日常吐槽部分可以跳过这题又坑了蒟蒻一下午,表示很不爽(自己弱能怪谁) 看完题想了一会一直觉得是很高级的做法,自己肯定不会了,搜了题解并不能看懂在讲什么,去问大神,Claris表示这不是 贪心+hash 就能搞定的题吗(为什么我连贪心都没想到啊还有怎么hash匹配并不会) 敲完怎么拍都拍不出错,一个小时后拍出来结果发现一个判 ? 的地方下标没更新,改了就A了。 但是为什么我注释掉这个判 ? 的语原创 2016-10-01 18:09:47 · 1616 阅读 · 0 评论 -
BZOJ4443: [Scoi2015]小凸玩矩阵 解题报告
日常吐槽,可跳过这部分这道题第一眼就觉得要二分一下答案,然后…然后我发现我不会……..冷静下来,想了一会,感觉可以二分后可以贪心一下,然后就欢快的打了起来 打完过了样例,然后WA了(不对呀我这么正确的 正解怎么会WA呢) 打了个对拍死活拍不出来,好吧我弱我看题解唉呀我怎么没想到二分匹配…….(但我真的觉得我原来的做法没错的) 没救了吐槽结束下面是题解二分一下第kk大,然后二分匹配一下,不大于二原创 2016-10-02 22:29:36 · 908 阅读 · 0 评论 -
BZOJ大视野 1191: [HNOI2006]超级英雄Hero
二分图匹配原创 2015-02-05 15:25:53 · 837 阅读 · 0 评论 -
BZOJ大视野 1059: [ZJOI2007]矩阵游戏 解题报告
二分图匹配原创 2015-02-05 15:22:31 · 1154 阅读 · 0 评论 -
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 · 768 阅读 · 0 评论 -
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 · 721 阅读 · 0 评论 -
BZOJ1901: Zju2112 Dynamic Rankings
发现还是不怎么会整体二分,学一道模版 将初始的序列的视为将第i个位置改为a[i]的操作,和所有操作放在一起 二分一个值,将所有操作里值不大于二分值的在树状数组里的位置+1,下放到右边,大于的下放到左边,对于询问,如果区间里的数≥k,将这个操作下放到左区间,否则下放到右区间,将k减去询问的值(因为这些左区间的操作以后不会再考虑),然后在树状数组里撤销之前的操作,向下二分code:#include<原创 2016-10-17 16:37:54 · 823 阅读 · 0 评论 -
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 · 897 阅读 · 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 · 734 阅读 · 0 评论 -
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 · 1460 阅读 · 0 评论