[暑假的bzoj刷水记录]
(这篇我就不信有网站来扣)
这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下。 7月27号之前刷的的就不写了 , 写的累
代码不贴了,可以找我要啊..
2017.8.27update : 开学了终于搞到了550 可还行
*数据结构
*可持久化线段树/主席树
*bzoj3932 [CQOI2015] 任务查询系统 : 比较裸的主席树,任务查分一下就好了 cqoi真良心
*bzoj4026 dC Loves Number Theory : 数论个头啊,对每个数分解质因数,然后可持久化线段树区间乘就行了 标记永久化
*bzoj4012: [HNOI2015]开店 转成所有区间内的点的深度和减去两倍的lca的深度和,每个点它到根的路径的深度都加上1,树剖+可持久化线段树实现即可
*简单线段树?
*bzoj4477: [Jsoi2015]字符串树 对于每种长度哈希一下插入线段树
*bzoj3441: 乌鸦喝水 每个水缸多少次之后不能喝是确定的,把时间分成很多个区间,每个区间内每个水缸能不能喝确定,线段树模拟一下
*bzoj4415: [Shoi2013]发牌 简单送分题,我写了一种线段树二分的做法 速度比较可观。
*bzoj4592: [Shoi2015]脑洞治疗仪 简单线段树区间赋值啥的
*bzoj4552: [Tjoi2016&Heoi2016]排序 二分答案然后把大等于的看成1,否则看成0,线段树区间赋值啥的
*bzoj4481: [Jsoi2015]非诚勿扰 每个男生被选择的概率是个等比数列,求和之后插入线段树 卡精度。
*bzoj3991:[SDOI2015]寻宝游戏 其实就是dfs序相邻的点的距离和的两倍,我比较二逼,用树剖+线段树大力搞233.(就说怎么就我代码这么长)
*bzoj3999:[TJOI2015]旅游 明显能树剖完线段树搞,然后注意合并的顺序
*bzoj3533: [Sdoi2014]向量集 线段树维护凸包
*bzoj3637: Query on a tree VI 树剖,对每棵树建线段树然后把轻链信息挂到父亲上去
*可并堆
*bzoj4003: [JLOI2015]城池攻占 : dfs一遍,到达一个点的时候把所有从这个点开始的武士加入,并且把所有儿子剩下的武士合并起来,然后支持一下乘法加法标记即可。
*平衡树
*bzoj3682: Phorni 类似[没有人的算术]从后往前把字符插入平衡树,可以O(1)比较字典序,然后用替罪羊重构时顺便重标号即可保证正确性。
*bzoj3878:[AHOI2014]奇怪的计算器 发现所有操作都不改变大小关系,所以平衡树维护即可。
*套树
*bzoj4553: [Tjoi2016&Heoi2016]序列 简单分析之后就可以发现是个二维偏序问题,套树/cdq分治
*分块
*bzoj4028: [HEOI2015]公约数数列 分块维护每块的gcd和异或和,不同的gcd只有log种,所以一块gcd相同的一起处理,不同的暴力即可。
*bzoj4537: [Hnoi2016]最小公倍数 对权值分块,带权并查集启发式合并。
*博弈论
*bzoj4035 数组游戏 : 每个点的sg函数只和n/i有关,也就是说只有根号种 sg[i] = Mex(sg[i*2]^sg[i*3]^...^sg[i*k]) k=2~n/i
*dp
*矩阵乘法
*bzoj4037: [HAOI2015]数字串拆分 发现一个数字的方案数可以矩阵乘法,所以用f[i]表示前i个点的所有可能情况的转移矩阵之和,枚举j转移即可,复杂度n^2*5^3
*bzoj4000: [TJOI2015]棋盘 裸的矩乘,但题目剧毒注意不要看错
*状压dp
*bzoj4003:[JLOI2015]战争调度 f[i][j][k]表示第i个点子树有j个叶子参加战争,然后第i个点到根路径上所有贵族的状态是k的最大收益,计算一下就可以发现复杂度是n*2^(2n-2)
*bzoj4416: [Shoi2013]阶乘字符串 f[S]表示S集合的所有串的右端点最大值,转移比较显然。n太大的时候一定不合法,判掉。
*bzoj3934:[CQOI2015]标识设计 f[i][j][k][S][0/1]表示转移到第i行第j列,还剩k个L没做,正在做的L占据的列的状态是S,现在这个方块是否被左边那个方块要求一定要填 的方案数。状态可以离散一下,然后记忆化搜索即可。
*只是dp
*bzoj4465: [Jsoi2013]游戏中的学问 f[i][j]表示前i个人形成j个环的方案数,然后枚举最后一个人加入已有的环还是新建一个环即可。
*bzoj4457: 游戏任务 大背包
*bzoj4583: 购物 对于每个时间段大dp一下 f[x][i][j]表示x时间段,卖了i个红球j个蓝球的方案数,分很多种情况讨论。
*bzoj4446: [Scoi2015]小凸玩密室 感觉智商被压制了,看题解吧。
*bzoj4709: [JSOI2011]柠檬 f[i]表示选前i个的最大值,对于每种权值维护一个单调栈即可。
*bzoj3594: [Scoi2014]方伯伯的玉米田 显然每次的右端点都是n,dp+二维树状数组优化
*树形dp
*bzoj4472: [Jsoi2015]salesman 每个点最多选多少个儿子是确定的,贪心选取最大的即可。
*bzoj4593: [Shoi2015]聚变反应炉 f[x]和g[x]表示先父亲/先自己的最小花费,第一种背包转移吧,第二种的话可以贪心。
*bzoj4557: [JLoi2016]侦察守卫 f[i][j]表示第i个点除了前j层都被覆盖的最小话费,g[i][j]表示第i个点可以延伸出去覆盖距离为j的点的最小话费,大概脑补下合并。
*bzoj3566: [SHOI2014]概率充电器 dp+换根
*数位dp
*bzoj4521: [Cqoi2016]手机号码 简单数位dp,不谈了。
*bzoj3329: Xorequ 数位dp+矩阵乘法
*二进制运算相关
*bzoj4017: 小Q的无敌异或 第一个问比较简单,然后第二个问的话就枚举一个右端点,然后一位位考虑。考虑第i位的时候把所有数对2^(i+1)取膜,然后上个数据结构支持查询有多少数相减之后这一 位是1既可
*bzoj4004: [JLOI2015]装备购买 类似一个m维的线性基?类似beijingoi一道题的做法。
*bzoj3503: [Cqoi2014]和谐矩阵 高斯消元解异或方程组
*bzoj3640: JC的小苹果 左边矩阵都相同的高斯消元,可以优化到每次n^2
*字符串
*哈希
*bzoj4084: [Sdoi2015]双旋转字符串 短的串哈希一下存map,然后对于每个长的串,枚举它的后半部分对应前半部分的位置,哈希表查一下即可。
*各种乱七八糟的自动机
*bzoj4032: [HEOI2015]最短不公共子串 字符串dp4和1 题解有点长 网上都有 所以不写了。
*后缀数组
*bzoj4486: [Jsoi2015]串分割 只需要枚举n/k个起点即可,然后后缀数组求出所有可能的答案,二分答案+处理lcpO(1)判定,只需要跳k次,所以复杂度是nlogn的
*bzoj4556: [Tjoi2016&Heoi2016]字符串 求出后缀数组之后按照rank扫,线段树区间取min,区间最大值。
*回文
*bzoj2160: 拉拉队排练 拉下车就没了。
*bzoj4480: [Jsoi2013]快乐的jyy 回文树裸题???
*图论
*bzoj4016: [FJOI2014]最短路径树问题 求一遍最短路,然后建出最短路径树,接下来就是长链剖分的经典做法了。
*bzoj4011: [HNOI2015]落忆枫音 DAG的话答案是入度的乘积,多一条x到y的边的话可以枚举一条从y到x的边抠掉不合法的方案,dp转移一下即可。
*bzoj4006: [JLOI2015]管道连接 f[i][j]表示i集合里的所有点都到达j点的最小话费,做2^10次dij吧,然后枚举p个点分别属于什么集合即可
*bzoj4010: [HNOI2015]菜肴制作 倒着扩扑排序一下,堆维护 简单题。
*bzoj4489: [Jsoi2015]地铁线路 先求出每个点最少换乘多少次,bfs即可。然后每条线路经过的所有点的距离相差最多1,两个方向分别建一条线段,等于最短距离的向地铁上连边,否则从地铁向这个点连边,就成了DAG求最长路。
*bzoj4478: [Jsoi2013]侦探jyy 枚举每个点不发生,尽可能多的让可以发生的入度为0的点发生,判断一下是否满足条件即可。
*bzoj4423: [AMPPZ2013]Bytehattan 平面图转对偶图,删边变成加边,并查集维护。
*bzoj4541: [Hnoi2016]矿区 平面图转对偶图
*贪心
*bzoj4027: [HEOI2015]兔子与樱花 每个节点删掉的贡献是确定的,所以每次把儿子所有的贡献排序后贪心一下即可。
*bzoj4464: [Jsoi2013]旅行时的困惑 求出每个点出发的线路数量和到达的数量,能合并就合并,然后剩下的留给父亲即可。
*bzoj4482: [Jsoi2015]套娃 按照外径从大到小做,每次选择一个可以套在外面的权值最大的套娃套在他外面,正确性显然。
*bzoj3709: [PA2014]Bohater 回血比扣血多的肯定先选扣血少的做上去,扣血更多的其实就是倒过来罢了。
*bzoj3716: [PA2014]Muzeum 大力旋转坐标轴之后是一个最小割,转成最大流贪心做
*计算几何
*bzoj1043: [HAOI2008]下落的圆盘 对于每个圆盘,求出它被覆盖的弧度区间求个并即可。
*bzoj4445: [Scoi2015]小凸想跑步 半平面交。
*网络流
*bzoj4485: [Jsoi2015]圈地 每个点割S和T分别表示卖给两个人,然后相邻的点连墙的花费,最小割。
*bzoj4554: [Tjoi2016&Heoi2016]游戏 简单二分图匹配啊,如果有炸不穿的石头你就把行列拆成两个就行了。
*bzoj3997 [TJOI2015] : 组合数学 想到上下界最小流建图,考虑倒过来求出没有连T->S那条边的情况下的流量。
对于第i行第j列的aij,可以流到的地方是除了自己以外的i'>=i j'>=j的格子,乱搞就行。然后因为总流量一定是所有ai的和,所以直接输出和减去流量即可。
*bzoj3931 [CQOI2015] :网络吞吐量 建出最短路扩扑图之后直接最大流。。 话说CQOI的题都这么良心嘛?
*bzoj3996 [TJOI2015] : 线性代数 把式子拆开,发现一些二元关系,最小割即可。
*bzoj3993 [SDOI2015] : 星际战争 二分答案然后求最大流 老套路了。。
*bzoj3130 [SDOI2013] : 费用流 显然费用全部加到流量最大的边,二分流量上界即可。
*bzoj3442: 学习小组 :费用流 比较经典
*bzoj3571: [Hnoi2014]画框 最小乘积生成树+二分图带权匹配
*bzoj3504: [Cqoi2014]危桥 网络流+奇怪判定
*倍增
*bzoj4444: [Scoi2015]国旗计划 最少数量的线段覆盖,可以倍增做
*bzoj4539: [Hnoi2016]树 先从外层的大树求lca跳到小树,然后小树里lca就行了。(话说这跟倍增啥关系,只是我写的倍增lca吧汗)
*莫队
*bzoj4542: [Hnoi2016]大数 稍微推一推就可以莫队了。
*数论
*莫比乌斯反演
*bzoj3994 [SDOI2015] : 约数个数和 归纳出个正常的反演式子就能算了 反正我挺绝望的
*容斥原理
*bzoj4487: [Jsoi2015]染色问题 三维大容斥
*bzoj3930: [CQOI2015]选数 : 两个不同数字的gcd不超过极差 特殊处理全部相同的情况,然后容斥一下
*bzoj4710: [Jsoi2011]分特产 容斥原理+简单dp
*其他
*bzoj4029: [HEOI2015]定价 暴力题 别写残就行
*bzoj4001: [TJOI2015]概率论 打表题
*bzoj4475: [Jsoi2015]子集选取 打表题
*bzoj4488: [Jsoi2015]最大公约数 按顺序加入,gcd只有log种 暴力一下
*bzoj4476: [Jsoi2015]送礼物 二分答案+单调队列,经典做法
*bzoj4591: [Shoi2015]超能粒子炮·改 lucas定理
*bzoj4555: [Tjoi2016&Heoi2016]求和 推个式子之后上个fft
*bzoj4589: Hard Nim FWT,注意不要反复做,可以直接快速幂,做两次就好了。
*bzoj3990: [SDOI2015]排序 搜索题
*bzoj3874: [AHOI2014]宅男计划 三分
*bzoj3714: [PA2014]Kuglarz 抽象成一个最小生成树的模型
*bzoj3712: [PA2014]Fiolki 直接启发式合并复杂度是对的,简单粗暴好写。正解貌似是建出操作树之后lca
*bzoj4985: 评分 二分答案,f[i]表示第i个点大等于二分值最小需要几个大等于二分值的评委 每次取两个最小值即可。
*bzoj4998: 星球联盟 离线,先搞出一棵生成树,然后带权并查集维护
*bzoj4754: [JSOI2016]独特的树叶 树哈希判同构,换根求出每个点作为根的哈希值和删掉这个点的哈希值,map查一下啥的
*bzoj4951: [WorldFinal2017]Money for Nothing 首先剔除没用的点,然后发现决策单调,分治解决。
*bzoj4803: 逆欧拉函数 搜索
大概就这样? 我好菜啊都不会