2020.08.06
其实很可做的一套题(30+40+30=100)
A简单缩点,但是人傻最后答案统计出了问题
B要记得有时候问有多少种取法的时候要想想背包
C题做出了一半,另一半没做出来,其实没什么好说(有时候做题可以打表找规律2333)
2020.08.07
还是比较可做(90+95+60=245)
A就是字典序最小的最短路,之前BZOJ那题是水的没写过正解就写得比较垃圾被卡常拿了90分
B题读入量太大没读优95分…读入数量级超过
1
0
6
10^6
106的记得要读优!!!
C题是二维链表,其实挺裸的,但是没想到一维
n
2
n^2
n2的链表到了二维还会是
n
2
n^2
n2,就写了垃圾的n棵splay
2020.08.08
难度开始增大了(100+10+20=130)
A(AGC013-E)题把DP方程列了出来发现矩乘就好了,还推了好久…10^9以上想矩乘
B题是多项式题(其实第一步的DP就没想到…可能是A做太久了),不过就算会DP也想不到多项式。对于一个数列可以考虑生成函数,尤其是一些递推或卷积形式的数列。
C是树上相邻点点权+1和相邻点异或和。学到两个东西
一要记住树上和一个点相邻的所有点有关的操作可以通过父亲存儿子的值与儿子自身的值相加的方法来维护
二是一个维护方法:Trie树上的所有数+1可以从根开始swap左右儿子然后往0儿子递归继续swap
2020.08.10
伪装成NOIP题的毒瘤题(100+0+0=100)
A是二分线段树优化DP
B(ARC064-F)循环移位考虑循环节!!!! 其它没啥好说的…
C(AGC009-E)挺神的题,考察思维,能想到就nb,想不到直接劝退
2020.08.11
(30+100+10=140)
A(AGC015-D)一样的话,思维题,能想到就nb,想不到直接劝退
B(ARC080-E)比较明显的平衡树操作,但是好像可以用堆+RMQ解决???
C(ARC078-F)其实是经典套路,状压的时候dp[S][x]表示几何内到一个点的状态,利用这个点转移
2020.08.12
题水(100+100+100=300)
A用tarjan求割点然后判非割点删掉后边数就行
B有个优化点,有时高维的dp可以把其中没什么用的一维(或更高)压成dp数组的答案
C题也有优化点,数组整体移位的时候可以移动数组的0下标所在的位置
2020.08.13
(90+15+10=115)
A题裸广搜,又被读优坑了…
B题其实是裸的树上背包,但是久了没做把
O
(
n
2
)
O(n^2)
O(n2)复杂度的做法认成
O
(
n
3
)
O(n^3)
O(n3)了
树上背包合并子树的时候只要是按当前合并的子树的siz和将要合并的子树的siz进行枚举单次O(1)合并复杂度就是
O
(
n
2
)
O(n^2)
O(n2)
C题是按时间为下标的线段树,与BZOJ的shallot一题差不多,下次绝对不错
2020.08.17
全场唯一没A题的…(40+30+30=100)
A题数据随机直接暴力…
B题还是位运算每位互不干扰的特点来dp
C题带参数进树上处理也还是比较简单的
服了自己…
2020.08.18
(0+100+0=100)
A就是树形DP,漏了一种情况…
B是简单结论题,随便做吧
C题在树直径上随便搞搞就好了
2020.08.19
(80+100+100=280)
A题用栈模拟就行(忘清空栈本地过了交上去80分????)
B送分判断
C是权值线段树模板题…
2020.08.22
从NOIP模拟变成省选模拟了…有点神仙…(0+45+0=45)
A题动态点分治,自己不熟…得再写写这种题
B题dp套dp,以前没见过,学到了
C题求1到n最短路是k的图的个数,dfs枚举一下最短路为i的个数然后统计答案就行
2020.09.08
(0+5+0=5)
A题基本思路就是上下两行往前跳,写挂了…
B题是求给定一些点,找点数最多的凸多边形,
O
(
n
4
)
O(n^4)
O(n4)还是很显然的(n=250竟然能过),正解调整一下转移的目标只转移极角相邻的点,但会出现三点贡献比较复杂,转化成DAG求最长路。
C是一个非常妙的线段树,用函数的形式写出一系列操作是两条平行线加上一个斜率为1的线段树,然后惊讶地发现这些函数可以相互合并,然后用线段树把一个个操作插进去就好了。
2020.09.10
(20+10+0=30)
A题是原根和分解质因数后根据CRT来分解后合并计数。遇到合数的时候一定要尝试质因数分解看看行不行
B题是反向的循环卷积,DFT完开根。因为开根有正负两种情况,所以要枚举根,由于对称性只需枚举一般,可以状压枚举。下次千万要对循环卷积敏感点
C是经典最大权闭合子图,但是太菜了自己以前不会…
2020.09.12
(15+0+0=15)
A题是一数学题,正解是偏导然后求出一层层的关系式来求,TJY大佬提供了一个优秀的二次函数一次次嵌套的做法很妙,但这种题比较少考
B题场上一直在推没推出来,结果栽在没想到结论…于是整题崩盘…之后是常规的质因数分解和线段树
C题是码农题…考场没看,事后想想还挺简单,不过还是调了5h…(场上写不出来的意思,需要提升码力)
2020.09.13
小火车的题(0+0+100=100)
A题一堆DP真的想不到,太强了。不过一个常见思路用于计数一定要学到:求
∑
i
f
i
\sum if_i
∑ifi的时候可以求小于等于i的所有
f
i
f_i
fi之后累加就可以得到答案
B题循环移位类的题。循环节循环节循环节又忘了…然后容斥一下可以用杜教筛解决
C题是经典的扔鸡蛋问题,但是数据范围比较大,于是打表找规律然后发现k很大的时候答案相同的n增长速度很快,所以k很大的时候可以预处理然后二分,k很小的时候可以直接暴力。
2020.09.16
(0+0+0=0)
一直在刚A结果没刚出来…后来才发现C的k<=50,还是得先把所有题仔细审一遍再判断哪道题适合自己
好吧其实A也不难只是自己太菜了…求向一个矩阵(边长10000)填入1-m的数满足n(n<=10)个条件(限制矩阵的最大值)很明显状压,然后通过矩阵的交集来容斥出矩阵并集包含多少格子,然后再一个容斥求方案。
B题是矩阵内选一些点改变这个点和按马行走方式一次能到达的点的开关状态求全部点状态由0变为1的方案数。想到了两两相关可能要列方程消元但不知道怎么表示,却发现自己忽略了异或和加法是类似的,列出异或方程求解。但是点数太多吃不消,就发现实际上整张图是可以通过两行和一列推出来的,然后点数就化简成n+m级别就可以bitset优化高斯消元了
C题是区间set操作和区间询问长度小于等于k的回文串个数,其中k是定值,小于等于50。正解是中间线段树两边Manacher,其实挺好想,自己由最朴素的dp想了一个把k个状态状态压成一个unsigned long long来对两边dp处理,不过在统计答案的时候需要统计1的个数比正解一个log,但是由于这种做法常数非常优秀在实测的时候还是比正解快了很多
2020.09.19
(30+100+0=130)
我人傻了A题30行区间DP模板题我不会做???(可能太久没做了的原因吧,总之真的难以原谅)
B题给定一个只含0-9的循环节然后无限循环,要求实现修改循环节的一位和区间(
l
,
r
<
=
1
0
18
l,r<=10^{18}
l,r<=1018)内的每一个区间的交错和。就是对于每个
l
<
=
x
<
=
y
<
=
r
l<=x<=y<=r
l<=x<=y<=r都要求(x,y)的交错和,交错就是一个正一个负得加。推一推会发现偶数位的最终会全部消掉,奇数位的会乘一个等差数列的权值后相加,然后就大力分类奇偶来线段树就好了。题解把循环节背长了避免了很多复杂的讨论,但是我没想到…
C题是神奇提答,就是给定一些点求直线斯坦纳树,前4个点n<=8,后4个点n<=50000但是所有点都在两行上。前四个点直接裸的斯坦纳树或者人工构造即可,后四个点题解是O(n)的DP,没看懂,但是由于是本地50000可以接受
n
2
n^2
n2,所以其实有个比较简单的
n
2
n^2
n2DP,直接看上下两行点到哪,是否联通,直接DP就行了,但是因为要输出方案实现起来比较复杂。
2020.09.20
(100+0+0=100)
A题签到轮换
B题是给定一个trie求trie上的串的LCS+LCP的最大值,可以用广义后缀数组或者广义后缀自动机+线段树合并(挺常规的题目但是没想到…)
C题与没有人的算术类似的利用替罪羊树动态标号,结果我们这些写一个log的全写挂了,LZH大佬写了两个log切掉了
2020.09.23
(100+0+0=100)
A题给定一个排列,问有多少个连续数段恰好是两个区间内的数的集合。线段树维护x-i的数段至少需要分成几个区间,然后维护区间最小和次小,最后减去n就是答案。这里有一个求固定k个数(为所有取值中k最值,k为小常数)的方案数,维护最小值、次小值、…、k小值及其个数即可
B题是平衡树维护DP的差分数组,不止是维护序列的时候,有时一些东西如果不好维护可以考虑差分后维护再求前缀和
C题求树上每个点到每种颜色距离最大的点的距离和。先求出每种颜色的直径,然后就可以简便地算。有一个技巧:求子树内的权值和如果是先全部修改完再查询可以类似求siz一样dfs一遍