救赎之路Ⅱ
写在前面的..
自己应该清楚应该做什么..
想要做什么呢..
SAM大量的题及课件[0/1]
巩固MRPR[0/1]
杜教筛[1/1]
树套树[0/1]
现在做了多少?(懒得数了.. [9.13更])
??/150
[2017.7.10]
开坑.. 状态回暖.. 独立想题的时间不多,还是很难自己做出一道题..
*4872: [Shoi2017]分手是祝愿
可以算出每种状态的最少步数
那么最少步数相同的状态其实是等效的
就设$f(x)$为最少步数为$x$的状态走到最少步数为$x-1$的状态的期望步数
算算就好了
4873: [Shoi2017]寿司餐厅
最大权闭合子图
4893: 项链分赃
其实b站上讲的很清楚
如果不想看b站的也可以看werkeytom写的
4895: 项链分赃(增强版)
同上
4810: [Ynoi2017]由乃的玉米田
莫队+bitset优化
[2017.7.11]
4822: [Cqoi2017]老C的任务
按$x$轴排序用BIT维护,把询问拆成两个
4823: [Cqoi2017]老C的方块
四种特殊点,最小割
*4824: [Cqoi2017]老C的键盘
树形dp
$f_{x,i}$表示在$x$所在子树里$x$排名为$i$的方案数
然后再用组合数合并一下
*3167: [Heoi2013]Sao
同上
现在是7.12的3点.. 刚做完cf div1.. 差点被虐(好吧就是被虐了)..
[2017.7.12]
A瞎搞半天是数组开小了,B有一种情况没特判到,C绝杀得分,好吧还是掉了..
Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals)
A. String Reconstruction
就是扫一遍嘛..
B. High Load
最优结果一定是$k$条链拼在一起的,所以就特判一下$n mod k$就行了,注意$k=2$有点坑
C. DNA Evolution
$10\times 10$棵线段树
D. Best Edge Weight
先做最小生成树
1)对于非树边,就是书上路径最大值减一,可以用st表做
2)对于树边,就是覆盖它的非树边的最小值减一,可以用并查集合并
*E. Rusty String
对于一个值$d$来说如果成立一定满足$s_{i}=s_{(i+d) mod n}$
那么也就是说V和K所在位置的差的约数是一定不成立的
那么就用fft求出这些差,然后再搞一下约数
F. Dirty Arkady's Kitchen
不会做呢..
1304: [CQOI2009]叶子的染色
猜一猜发现选哪个点做根是一样的(其实全部跑一遍应该也不会TLE)
就dp,f_{i,0..2}表示这个点涂白、黑、不涂的最少涂色点数
*1566: [NOI2009]管道取珠
题目要求$\sum\limits_{i=1}^ka_i^2$,就可以看成是两个人同时取,最终相同的方案数
这个模型转换妙啊..
[2017.7.13]
*2118: 墨墨的等式
如果$x$可以被拼凑出来,那么$x+a_i$显然也可以,所以我们只需要求在模$a_i$下最小的是多少
这个东西可以用最短路来算
*2144: 跳跳棋
看错题了..
把从中间往两边跳看成是一个节点到他的孩子节点,从两边往中间跳看成是一个节点到他的父亲节点
那么其实就是要求lca
手动模拟一遍即可
*2298: [HAOI2011]problem a
每个人说的话可以看成是一条线段
那就是求两两不相交的线段的权值和最大值
2306: [Ctsc2011]幸福路径
倍增floyd
2326: [HNOI2011]数学作业
分段矩乘
晚上又被cf题虐
[2017.7.14]
A m又写成n,B切掉,C问了Nano_Ape大爷之后就会了,但是inf赋值小了..
幸亏没掉下1900,上次div2上分不亏,给我续了三次div1的机会..
Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals)
A. Office Keys
排序,二分,扫一遍判断,因为两两不相交(听说有dp做法)
B. Cards Sorting
模拟就好了
C. Bamboo Partition
注意到某一段$d$中这些竹子该在那天砍是不会变的
所以就可以分段求最大值
复杂度证明这里不写,想知道来问我
*D. Singer House
妙啊.. %%%liaoliao
dp,$f_{i,j}$表示$i$层大的树有$j$条链的方案数
合并就相当于两棵子树合并
1)直接合并,两棵子树无相交,需要算是否走到根的方案
2)根独自作为一条路径
3)合并且有一条路径从左边到右边
4)有一条路径从左边到根到右边
*E. Perpetual Motion Machine
不会做呀..
*2654: tree
cls的题就是不一样
二分如果每一条白边加上一个$x$,按白边优先求出最多白边,按黑边优先求出最小白边
如果$need$在这中间就可以直接输出了,不然就二分调整
2665: [cqoi2012]编号
就是暴力枚举
这东西前提是你要知道第$200000$个数是$5\times 10^7$大小的
因为要有三个不一样就统计五个一样的方案
[2017.9.9]
哇好久没写过了..
去了一趟雅礼 很棒
最近两个月病魔缠身,还是要好好休息
*4979: 凌晨三点的宿舍
分治
把每个点先移到分界线处
然后从下扫上去就好了
*4962: 简单的字符串
枚举中间分开的位置
如果这个序列是满足的
那么左边一个右边一个所组成的字符串是一个双回文串或者就是一个回文串
双回文串有一个性质
如果双回文串$T=ab$,那么存在一种方案使得$a$是最长回文前缀或者$b$是最长回文后缀
证明先挖个坑
[2017.9.13]
除除草..
*4999: This Problem Is Too Simple!
每种颜色单独考虑,记录每个节点下次被改成其他颜色的时刻
然后就是统计一个节点到根的路径有多少个节点
dfs序 就是区间修改单点询问 可以用BIT
4977: 跳伞求生
按$a_i$和$b_i$分别排序,那么一个人可以选择的就是单调的了
用堆维护可以进行的操作
1)找一个新点
2)后悔前面的
*2086: [Poi2010]Blocks
poi的题好强啊..
问题就是要找最长的子串使得平均数要大于等于$k$
统计前缀和,维护单调下降,然后从后往前去找答案
可以证明这样一定是最优解
*2093: [Poi2010]Frog
倍增,因为$m$是固定的,滚动来减少空间
3517: 翻硬币
用$X_{i,j}$表示$(i,j)$这个点翻还是不翻,如果要全都变成$0$,可以列出:
$$X_{1,j}\oplus X_{2,j}\oplus \cdots \oplus X_{n,j}\oplus X_{i,1}\oplus X_{i,2}\oplus\cdots\oplus X_{i,n}=a_{i,j}$$
其中$X_{i,j}$只算一次
然后你把第$i$行第$j$列所有的方程左右分别异或,就会得到:
$$X_{i,j}=a_{1,j}\oplus a_{2,j}\oplus \cdots\oplus a_{n,j}\oplus a_{i,1}\oplus a_{i,2}\oplus\cdots\oplus a_{i,n}$$
其中$a_{i,j}$只算一次
右边的很明显,左边为$X_{i,j}$证明如下:
1)对于不在第$i$行且不在第$j$列的,只会被算两次,因此抵消
2)对于在第$i$行或者在第$j$列但不是$(i,j)$的,会被整一列或者整一行算一次,由于$n$是偶数,因此抵消
3)对于$(i,j)$,显然会一共被算$2n-1$次,因此留下
然后预处理$a_{i,j}$行与列的异或即可
*5017: [Snoi2017]炸弹
%%%liaoliao
可以线段树优化建图然后tarjan缩环求解,时间空间复杂度$O(nlogn)$
liaoliao教我一种$O(n)$的做法
计算方案没有什么差别,同样求它连向的点的最左的位置、最右的位置
维护一个单调栈,覆盖范围越来越小
以从左往右扫为例
对于$i$,如果栈顶元素$x$可以覆盖它,连一条$(x,i)$,否则弹出,已经没用了
如果此时栈顶元素$x$覆盖范围没有$i$远,显然没用了弹出,因为已经有$(x,i)$的边
再把$i$压入栈
从右往左同理
然后tarjan缩环,同样的处理方法
*3103: Palindromic Equivalence
manacher可以维护出$O(n)$组相等与不等关系
相等的并查集合起来,不等的连条边
然后这个图就是一个弦图
对于$i<j<k$,如果$i$和$j$、$i$和$k$之间有边,那么$j$和$k$之间一定有边
证明:
因为$i$和$j$之间有边,那么$[i+1,j-1]$是回文串
因为$i$和$k$之间有边,那么$[i+1,k-1]$是回文串
所以$[k-j+i+1,k-1]$也是回文串,而且$a_j=a_{k-j+i}$且属于同一个等价类
如果$a_{k-j+i}=a_{k}$,那么$k-j+i$和$k$也属于同一个等价类
如果$a_{k-j+i}\not\equiv a_{k}$,那么$j$和$k$之间就有边
那么这个弦图从左到右就是一个完美消除序列,就可以直接算了
对于一种等价类,我们只需要找最左出现的位置所连的边就可以了
如果存在$i<j<k$,$j$和$k$属于同一个等价类且$j$是该等价类最左出现的位置,$j$和$i$无连边而$k$和$i$有连边
$[j+1,k-1]$肯定是回文串,$[i+1,k-1]$肯定是回文串
那么$[i+1,k-j+i-1]$也是回文串
如果$k-j+i-1<j$,那么$j$不是最左出现的位置
否则$[j+1,k-j+i-1]$也是回文串
同样的会在$i+1$后出现一段$[j+1,k-j+i-1]$,同样证明了$j$不是最左出现的位置
所以命题不成立
[2017.9.17]
这么久没更了啊..
但是.. 我好像也没做什么题啊..
*4931: 塔
和4664类似..
算组合数就$k^2$求gcd约分
4974: 字符串大师
不觉得就是kmp反过来吗..
*3339: Rmq Problem
权值线段树 维护某个权值出现最右位置 统计区间min
询问就是找最小的在左端点左边的
3585: mex
同上
4243: 交朋友
xjb搞
2376: 保龄球
单调队列dp 注意要留空
*4985: 评分
由于计算的数是固定的 就是一棵三叉树
二分答案标01 树形dp就好了
4419: [Shoi2013]发微博
反过来xjb搞
[2017.9.19]
前几天晚上做了一场cf.. 还是太弱了..
Codeforces Round #434 (Div. 1, based on Technocup 2018 Elimination Round 1)
A. Did you mean...
就三个三个判断..
B. Polycarp's phone book
hash..
C. Tests Renumeration
分三种数
分三种情况
*D. Wizard's Tour
问题转化成把边定向然后最多对边 每对边指向同一个点
做生成树
对于非树边随便定向
树边的定向可以决定孩子节点入度的奇偶性,存在一种方案使得只有根入度为奇,且这样一定最优
*4874: 筐子放球
如果把每个选择看成是$a_i$到$b_i$的无向边..
好像,就是上面的题了
开始学习杜教筛
[2017.9.24]
好像.. 这都快要变成周更了..
*4242: 水壶
最小生成树,建图方法很特别
bfs每个点和第一次到某个格子的点连边
2457: [BeiJing2011]双端队列
排序后发现要求你找最少的V
一段相同的数可以xjb搞
4808: 马
最大独立集
*4244: 邮戳拉力赛
路线可以看成是一条从$0$到$n+1$和若干个环组成
$f_{i,j}$表示前$i$个处理完毕,其中有$j$条环经过了$i$的最小花费
*5046: 分糖果游戏
肯定倒着dp 发现先手取法与先手与后手差值有关
$f_{i,j}$表示$i$到$n$先手要取得至少$j$的得分,最小的差值
1)后手取不到$s_i-j+1$,即不能让后手达到$f_{i+1,s_i-j+1}$的差值
2)不取第$i$个,至少需要$1$点能量并且达到$f_{i+1,j}+r_i+1$
4403: 序列统计
要知道这个$$\sum_{i=m}^nC_{i}^m=C_{n+1}^{m+1}$$
[2017.9.26]
哇贼难受天天病.. 哇纯白好好听0.0..
5056: OI游戏
把最短路图建出来,每个点找一个入度
*4670: 佛罗里达
随机放入顺序,然后贪心更新答案 800次就够了
4448: [Scoi2015]情报传递
把询问提前$k$个时间 然后树剖即可
*4299: Codechef FRBSUM
如果$1$到$mx$的值都能取到,并且存在一个数$x\leq mx+1$,那么$1$到$mx+x$也能取到
然后主席树来修改$mx$,最多修改$logn$次,所以复杂度是$O(nlog^2n)$
4408: [Fjoi 2016]神秘数
同上
4407: 于神之怒加强版
莫比乌斯反演
*4456: [Zjoi2016]旅行者
分治 枚举中轴线上的点到询问两点距离和更新答案
*4423: [AMPPZ2013]Bytehattan
转对偶图
4421: [Cerc2015] Digit Division
$2^{段数-1}$
[2017.9.29]
原来.. 这么快就快十月了..
4415: [Shoi2013]发牌
线段树啊.. 感觉有$O(n)$的做法但没想到
4401: 块的计数
枚举块大小$d$,看$size_x\ mod\ d=0$的个数等不等于$n/d$
4491: 我也不知道题目名字是什么
sb题
4475: [Jsoi2015]子集选取
每种元素互不影响,单独考虑
考虑最后一行,第$i$个选了则左上方全都要选,就变成了缩小规模的三角形
所以$$f_n=\sum_{i=1}^{n-1}f[i]+1$$
4445: [Scoi2015]小凸想跑步
半平面交 裸题?
*2725: [Violet 6]故乡的梦
以前挖的坑
构出最短路图,缩边双
并把不在最短路上的点分到最近的边双
然后xjb搞
*4416: [Shoi2013]阶乘字符串
因为$C_{450}^{22}<22!$,所以大于$21$的都不可能
用$g_{i,j}$表示$i$后面第一个$j$出现的位置
$f_{state}$表示$state$的数构成阶乘字符串最短要到哪里
然后枚举子集dp
4417: [Shoi2013]超级跳马
维护奇数行和偶数行前缀和
然后矩阵快速幂
*4402: Claris的剑
让奇数位置和偶数位置的数单调不降,就不会重复
枚举数列最大值$x$
那么这个数列只有两种情况
$$1,2,1,2,3,...,x-1,x$$
$$1,2,1,2,3,...,x-1,x,x-1$$
首先肯定有$1,2,3,...,x$的数列
再在中间插入若干数量的$(i+1,i)$
相当于有若干个相同小球放入$x-1$个筐,可以有空筐
就组合数xjb搞
*4405: [wc2016]挑战NPC
又复(chao)习(le)了(yi)下(bian)带花树
每个筐拆三个点互相连边,然后其他按照题意连边
跑一般图最大匹配,答案减去$n$就是最终答案
证明显然
因为要输出方案,就先让$n$个球先去匹配
*4424: Cf19E Fairy
建出生成树
对于一条非树边
如果连上去是奇环,这段路径都有可能成为可删的边
如果连上去是偶环,这段路径就不可能成为可删的边
因为可以跟其他奇环变成奇环
4499: 线性函数
线段树
*4454: C Language Practice
Claris的毒瘤题
不想写,看lych_cys的blog吧
[2017.10.7]
周已经不足以形容我的拖更速度了
*4446: [Scoi2015]小凸玩密室
$f_{i,j}$表示走完$i$的子树后走到深度为$j$的祖先的花费
$b_{i,j}$表示走完$i$的子树后走到深度为$j$的兄弟节点的花费
然后就xjb dp,对于某个点开始走就是子树->父亲->兄弟->父亲->兄弟...
4484: [Jsoi2015]最小表示
按照边跨过的层数进行算,bitset优化
4477: [Jsoi2015]字符串树
把询问拆成三个分别在$x$、$y$和$lca$上
dfs建字典树
4476: [Jsoi2015]送礼物
二分答案 推柿子 单调队列
4488: [Jsoi2015]最大公约数
右端点向右推时会影响gcd的值,而这些值最多有log个取值
*4487: [Jsoi2015]染色问题
容斥
算$i$行$j$列$k$种颜色不满足条件的方案数,把不填也算一种颜色
这样是$O(nmc)$
推柿子 发现其实后面一串可以搞搞 变成二项式展开的样子
就可以做到$O(nclogm)$
4472: [Jsoi2015]salesman
贪心啊..
如果有其他方案,一种是最小的那个有很多,一种是有$0$
*4435: [Cerc2015]Juice Junctions
答案只有可能是$0,1,2,3$
如果不联通,答案为$0$
如果不在一个边双里面,答案为$1$
如果删去任意一条边还在一个边双里面,答案为$3$
否则为$2$
就hash一下边双
4459: [Jsoi2013]丢番图
推柿子
4418: [Shoi2013]扇形面积并
线段覆盖,线段树二分查找第$K$大
4412: [Usaco2016 Feb]Circular Barn
倍长,找出发点,贪心
[2017.7.11]
日常拖更
*351D. Roads in Yusland
把边覆盖变成点覆盖
维护边的dfs序
维护经过$x$的边
分别维护经过某条边来覆盖$x$的最小费用
4481: [Jsoi2015]非诚勿扰
等比数列求和计算概率 树状数组维护
4411: [Usaco2016 Feb]Load balancing
枚举$x=a$的位置线段树分别维护两端的数量
然后线段树二分查找
4498: 魔法的碰撞
与4931类似
4429: [Nwerc2015] Elementary Math小学数学
sb题
4482: [Jsoi2015]套娃
排序 堆维护
*4430: [Nwerc2015]Guessing Camels赌骆驼
对于一对数$(x,y)$
如果都是同样顺序的,不会产生逆序对
如果其中有一个不一样,会产生两个逆序对
4409: [Usaco2016 Feb]Circular barn
枚举断点斜率优化
4413: [Usaco2016 Feb]Milk Pails
dp每种状态最少步数
4410: [Usaco2016 Feb]Fence in
最小生成树,只是一次加很多边
4457: 游戏任务
背包
*4422: [Cerc2015]Cow Confinement
有不用差分的做法,但我不会
矩形不会在边重合,但会在点相交
*4453: cys就是要拿英魂!
后缀数组
对于$i<j$
1)如果$rank[i]>rank[j]$,$i$一定比$j$优
2)如果$rank[i]<rank[j]$并且$r\geq j+lcp(i,j)$,那么$j$比$i$优
3)如果$rank[i]<rank[j]$并且$r<j+lcp(i,j)$,那么$i$比$j$优
然后就单调栈维护二分查找答案
[2017.10.17]
真的能拖..
主要是自己效率低下吧..
4439: [Swerc2015]Landscaping
标准最小割
*4447: [Scoi2015]小凸解密码
用set维护一段0的左端点和右端点
细节题
*4428: [Nwerc2015]Debugging调试
本以为二分很优秀..
对于长度为$n$的,枚举把它分成$i$段的最小花费
4485: [Jsoi2015]圈地
标准最小割
貌似和那个狼和羊的故事一样啊
*4478: [Jsoi2013]侦探jyy
一个点如果不一定要选,就把所有入度为$0$且不能到达它的点所能到达的点并起来
如果存在某个必须要选的没有选到,这个点就要选
*4465: [Jsoi2013]游戏中的学问
固定点法??
要不拿出它和两个点组成环,要不让他加入到某个点后面
就是$$f_{n,k}=(n-1)(n-2)f_{n-3,k-1}+(n-1)f_{n-1,k}$$
抄一手TA爷的总结:对于这种类似n个球m个箱子的。。可以枚举最后一个球,也可以枚举最后一个箱子。
Codeforces Round #440 (Div. 1, based on Technocup 2018 Elimination Round 2)
*C. Points, Lines and Ready-made Titles
把一个点和上下左右的点连边,同一联通块的一起算
如果这个联通块有环,那么$x$行$y$列所有的边都可以同时出现,答案就是$2^{x+y}$
如果这个联通块是树,那么只有当$x$行$y$列所有的边同时出现不成立,答案就是$2^{x+y}-1$
证明一发??
把这$x$行$y$列看成$x+y$个点,一个点$(x1,y1)$就是把$x1$和$y1$连边,表示$x1$和$y1$只能选其一
那就是把边分配给点
如果存在一个环或以上,那$n\leq m$,一个点一条边是满足的
但如果只是一棵树,那$n-1=m$,总会有一个点没有边分配给他
是不是666??
*D. Paths
首先$1$和大于$n/2$的质数都是独立点,删掉完事
对于一个点对$(x,y)$
如果$gcd(x,y)>1$,贡献为$1$
如果$minp_x\cdot minp_y\leq n$,贡献为$2$
否则为$3$
那么假设所有的点对答案都是$3$
然后再依次减去前两种情况
因为第一种情况是第二种情况的子集
Codeforces Round #441 (Div. 1, by Moscow Team Olympiad)
C. National Property
对于相邻两个
如果$x<y$,那么$y$变$x$也要变,$y$向$x$连边,因为大连小,保证最后是个DAG
如果$x>y$,$x$必须变,$y$必须不变
那么把必须变的在DAG上打标记进行dp
看最后是否有必须变又必须要不变的就行了
D. High Cry
枚举每个点为最大值的情况,左右扩展最大值的情况,找最靠近的$y|x>x$
*E. Delivery Club
二分答案
用set维护当一个人在$i$时另一个人可以在的位置
%%%WrongAnswer
貌似可以看当一个人在$i$时另一个人可以在的位置区间,然后倒推,这样判断是$O(n)$的
*F. Royal Questions
跟上一场的e一样
只是这个不允许有边多出来
所以就做最大生成环套树
[2017.10.18]
争取日更吧
*4479: [Jsoi2013]吃货jyy
当$k\leq 15$时,可以dp
$f_{i,state}$表示走到$i$点应该经过的$K$条边的状态$state$的最短路
就可以用dijkstra来算了
当$k>15$时,最多会形成$7$个联通块
这$7$个联通块最多会有$Bell(7)=877$种连通状态,$Bell$是贝尔数
只需要让它有欧拉回路起来就可以了,然后就可以枚举每条边进行dp
$f_{i,j,state}$表示第$i$条边,第$j$种连通状态,每个点的度数奇偶性
4458: GTY的OJ
与超级钢琴类似,树上RMQ
4461: [Jsoi2013]美丽家园
预处理矩阵来矩阵乘法
[2017.10.19]
*4471: 随机数生成器Ⅱ
$$x_i=x_{i-1}+x_{i-2}$$
$$x_i^2=x_{i-1}^2+x_{i-2}^2+2x_{i-1}x_{i-2}$$
$$x_{i-1}(x_i+x_{i-2})=x_{i-1}^2+2x_{i-1}x_{i-2}$$
$$x_ix_{i-1}-x_{i-1}x_{i-2}=x_{i-1}^2$$
所以
$$\sum_{i=0}^nx_i^2=x_{i+1}x_i-x_0x_{-1}=x_{i+1}x_i-C1(C2-C1)$$
然后预处理矩阵$A^0,A^1,A^2...A^n$
再预处理矩阵$A^0,A^n,A^{2n}...A^{mn}$
然后每次查询一个数就是$O(2^3)$
然后我就混到了rk2?
*4490: 随机数生成器Ⅱ加强版
同上
然后我就混到了rk1?
4452: [Cerc2015]Export Estimate
观察可得
$$ansnum=num-degree_0-degree_2+cycle$$
$$ansedge=edge-degree_2+cycle$$
然后并查集顺便维护度数为2的点的个数就行了
3784: 树上的路径
太久没打过点分来打打
维护点分的dfs序,然后就相当于查询一个区间,像超级钢琴那样做就行了