NOI2021训练记录
NOI2021训练记录
week1(4.19~4.23)
4.19
LOJ3504「联合省选 2021 A」支配
需要利用支配关系是一棵树这个结论
LOJ3503「联合省选 2021 A | B」滚榜
把贡献拆到相邻两个人身上就能直接状压dp了
LOJ3501「联合省选 2021 A | B」图函数
很暴力的一道题,需要一点转化
写了LOJ3500「联合省选 2021 A」矩阵游戏的50分
4.20
上午校内模拟赛
T1 发现强制在线之后前四十位和原来一样,把这个拿出来开哈希表,枚举1~n查询。打表发现这样做除开前1000个数不会有三个以上的数冲突在一起,就做完了。
T2 列出式子发现是个简单的凸包题,用超哥树写掉了。
T3 想出贪心之后可以直接按位确定,考场上的写法不太对,对不能达到最优的位的处理不太恰当,靠着数据水骗了50分,考后补掉了。
LOJ3500「联合省选 2021 A」矩阵游戏
构造题,考虑先构造出满足加起来=b的条件,再在不改变第一个条件的情况下构造出任意的矩阵。利用奇偶性分配正负号加上一个相同的权值,使得矩形内增量为0,转化为差分约束
LOJ3505「联合省选 2021 B」数对
暴力的复杂度是调和级数
4.21
LOJ2720「NOI2018」你的名字
最开始想的是把两个SAM拼一起,就想歪了。其实直接把T在S上匹配,用线段树合并判断是否合法,类似于一个双指针的过程,最后用SAM去重就做完了。
LOJ2721「NOI2018」屠龙勇士
用multiset简单处理出攻击力就是一个EXCRT裸题
LOJ2302「NOI2017」整数
按题意用set模拟了一下碾过去了...复杂度不会证,修改均摊\(O(1)\)的话应该是个\(\log^2\) 。
正解是把加和减分开统计,比较后缀大小,就能压位了。
想了下 LOJ2305「NOI2017」游戏 的思路。
4.22
LOJ2303「NOI2017」蚯蚓排队
想了个hash本来以为是\(nk^2\),看题解发现这样是\(nk\)的。写了个双hash一遍过了
LOJ2305 「NOI2017」游戏
\(2^d\)枚举之后2-SAT
LOJ3345「APIO2020」粉刷墙壁
暴力枚举当前位计算出往后能刷多少次,最后单调队列转移
LOJ3346「APIO2020」交换城市
求次小瓶颈路,讨论一下发现要么成环要么有一个点度数>3。在kruskal重构树上考虑,如果一个点的子树里有横叉边或者有点度数>3就满足条件,可以倍增求出深度最深的这样的点。
LOJ3144「APIO2019」奇怪装置
列式子发现是统计模\(\frac {ab}{gcd(a,b+1)}\)下本质不同点个数,可以扫描线。
4.23
上午模拟赛
T1 不会,写的暴力
题解做法是利用2n条边的二分图的一个性质,把链删掉就只剩偶环了,然后把偶环的权值拿出来背包。
T2 费用流模型比较简单,随了组数据发现连向s和t的边都没有退流,可以直接模拟费用流,但是不会线段树维护这个东西,所以写了个 \(n^2\) 的暴力模拟费用流。题解里的线段树确实比较复杂。
T3 用斯特林数拆成下降幂,转成组合意义就是连通块内选j个点的方案,可以dp。
题解里没有拆,组合意义变成可重有序地选k个数,用EGF直接做也行。
week2(4.25~4.30)
4.25
LOJ3146「APIO2019」路灯
转化为二维数点
LOJ3145「APIO2019」桥梁
分块
LOJ2585「APIO2018」新家
multiset的麻烦操作+二分
4.26
LOJ2586「APIO2018」选圆圈
暴力+kdtree剪枝
LOJ2308「APIO2017」商旅
明显二分,但直接拆点找负环是\((nk^2)\log w\)的,显然无法接受。考虑优化掉 \(k\) ,即对于一次固定起始点的买卖可以预处理出最优策略,然后再最短路可以做到 \(n^3+n^2k+n^2\log w\)
4.27
上午训练赛
T1 线性代数不会,写了个常数巨大的矩阵快速幂。
T2 发现分块可以不带 \(nm\),复杂度 \(1e8\),实际跑的飞快。标程是线段树。
T3 神经网络提答,寄了。
LOJ576「LibreOJ NOI Round #2」签到游戏
结论+线段树上二分
4.28
LOJ6437「PKUSC2018」PKUSC
把贡献拆开,发现是答案是圆在多边形内的圆弧长度之和除以2PI。
LOJ6436「PKUSC2018」神仙的游戏
考虑一对字符对匹配失败的贡献,显然一个border里只要出现0和1匹配就不成立,否则成立,那么把正串1的权值设为1,反串0的权值设为1,然后NTT。
LOJ6435「PKUSC2018」星际穿越
首先有个结论是往右跳只会最开始跳一次,然后倍增
LOJ6432「PKUSC2018」真实排名
D1T1签到题,注意判0
LOJ6433「PKUSC2018」最大前缀和
D1T2签到题,不过WA了好几发才过。转化成一边前(后)缀和>0,另一边<=0,直接状压就行了。
剩下一道斗主地没看,晚上看PKUSC2019题解,自己编了下。
4.29
模拟赛
T1 在ZR做过原题,转化成左儿子个数<m-1,容斥下可以\(O(nm)\),也可以dp。
T2 发现 \(i\) 的答案要么是 \(i\) 要么是 \(ans_{nex_i}\) ,剩下的就是SCOI2016萌萌哒了。
T3 先二分,树可以直接点分治,基环树的话可以断一条边,不选就是点分治,选就是在剩下的环上取一段前缀和后缀,可以用线段树做。
4.30
LOJ2538「PKUWC2018」Slay the Spire
D1签到题,讨论一下发现有两种情况:
- 只选一张攻击
- 不选的m-k张里全是攻击
然后发现 \(n^2\) 就能过,随便写了个dp。调了很久样例,还WA了一发k=1一发多测清空。
LOJ2540「PKUWC2018」随机算法
直接状压和存独立集大小是\(2^nn^2\)的,有点卡。可以转化成每次加一个点,然后转移枚举加的最后一个点,状态是得到集合内的最大独立集概率。
还剩一道斗地主不看了
week3(5.6~5.8)
5.6
上午正睿模拟,没啥状态有点摸
T1 构造一个有向图满足内向生成树个数为给定的C,C是个没啥性质的\(1e18\)的常数。这种一般就二进制考虑了,然后有一种构造可以使加一条边方案数加\(2^i\)。
T2 发现删掉的串的后缀串是没用的,用trie处理,维护下可以自由生长节点的个数,可以生长出一个节点的节点数和总结点数。
T3 大poly,寄。
LOJ2071「JSOI2016」最佳团体
二分+暴力dp
LOJ2072「JSOI2016」独特的树叶
树Hash,加个换根
LOJ2075「JSOI2016」位运算
状压之后矩阵快速幂
5.7
正睿模拟
T1 模数为3的二项卷积。
用lucas拆开组合数,发现下标\(\mod 3\) 加起来>=3时就为0,否则把下标除以三,按新的下标继续分类,题解说复杂度是 \(n^{1.6}\) 。
T2 一个二分图,每条边有\(1/2\)的概率出现,求两边各随机一个点他们之间最短路的期望。
用dp维护bfs的过程,有点卡常。
T3 求数字互不相同,且异或起来不为零的序列的数量。
如果容斥异或起来不为0(枚举相同的数字对数)是没法做的,因为相同的数对和原序列里的数字相同时会被算重,那么容斥异或起来为0的序列,发现我们可以轻松构造出前 \(i-1\) 个互不相同且前 \(i\) 个异或起来为0的序列,剩下的一个稍微讨论下就好了。
下午学校模拟 没题解,不知道T1咋做
T2 把贡献拆开再算下概率就能 \(O(n)\) 了
T3 讨论下大小发现贡献是\(n\)条折线加起来的形式,扫描线维护。
5.8
LOJ2073「JSOI2016」扭动的回文串
观察到一个性质之后直接二分+hash
LOJ2074「JSOI2016」灯塔
决策单调性优化贪心(甚至dp都不是,有点裸)
LOJ2077「JSOI2016」飞机调度
转化成最小链覆盖,网络流解决
下午写了两道CF水题(AB),C看了题解。
week4(5.9~5.14)
5.9
晚上来学校vp了一场div1,写了ABC
5.10
上午模拟赛
T1 有个结论是一棵树上距离一个点最远的点一定是直径的一个端点,然后动态维护连通块直径
T2 发现排遍序之后贡献就是凸函数了,并且上凸可以直接分治。
T3 线性代数,寄
下午开会,写了CF1483的ABCD
这之后就是PKUSC了
week5(5.18~5.21)
5.18
今天的题有点毒瘤,姑且只订正了一道
ZROI1869 匹配 考虑找出gcd个循环节,按轮廓线dp。具体的位运算有点麻烦
5.19
ZROI598 方格
二分答案+高超的dp技巧
ZROI599 凸包
求一堆点的子集的凸包大小的最大值,先把点按极角排序,再对边排序,这样dp转移的时候一条合法的凸壳一定是能被表示成边的上升序列的,反之则不行,那么枚举起点直接dp(注意按扫描法的话要去掉点的顺序在起点之前的边)。
ZROI600 组合数学
这种凭空列一个奇奇怪怪的式子可以考虑组合意义
前面的可以枚举\(a_1\)直接算,现在考虑求后面的。倒着看,相当于有 \(n\) 种颜色的球,每种 \(a_i\) 个,每次选一个,并且删掉所有这种颜色的球,一共选 \(n-1\) 个。可以先枚举哪个没被选,求出它最后选(第n个)的概率,那么容斥一个集合 \(S\) ,它在 \(S\) 之前选的概率是 \(\frac{a_i}{a_i+\sum_{j\in S} a_j}\),和容斥系数一起用背包求就好了,就是猎人杀那题的套路。
5.20
ZROI506 字符串拼接
发现dp对2取模后永远只有两个位置是1,直接状压。
ZROI507 那个序列
字典序一般按位确定,需要一点高超的均摊check技巧。
ZROI508 那棵树
每次修改一个颜色,求所有虚树大小之和
发现虚树大小就等于按dfs序相邻两个点距离和除以2,用set直接维护。
这之后就是APIO了
week6(5.24~5.28)
5.24
校内模拟了三道noip题,就不写了
晚上div1,C写假了,掉了5分。
5.25
补了昨天的C题
曼哈顿转切比雪夫:
切比雪夫转曼哈顿:
正睿模拟赛T1是原题,T2数据结构需要用到上面的技巧。
5.26
正睿模拟赛三道djq题,写了两个暴力有一个还挂了,成功垫底
下午vp了场div1
5.27
正睿模拟赛,都是数据结构板子题,切了个LCT(T2)
T1是可持久化fhq,不会
T3我写了树上莫队但是卡不过去
5.28
学校模拟赛T1是简单题压个\(3^n\)状态,T2是01trie合并+贪心
晚上CFdiv2,E看题解不是很难但没想出来,可能对SA和插板不太熟悉
week7(5.31~6.4)
5.31
凌晨CFdiv1+div2,还剩一个半小时的时候先去写D,结果假了,最后40分钟想到E就是个插板,结束后20分钟比较冷静的时候才把细节想完写出E,还好我手速够快没掉分。
学校模拟赛写了200,实际80
T1 计算几何,精度开的\(1e-5\)只有80,开\(1e-9\)就A了
T2 广义SAM+线段树合并,算空间的时候没把SAM算进去,结果MLE了。以后记得线段树合并开20N就行,最后算一遍总空间。
6.1
正睿模拟
T1送的
T2 求删掉每个点的最小生成树(权值取max)
想到在原最小生成树上做这个问题就很简单了
6.2
T1 构造排列的题可以从最值(最小/最大),相对顺序等入手
T3 至少被一个元素满足条件->容斥,赛时没想清楚。优化可以减少状态/dfs
AGC033C 删叶子删到空可以转化成直径减少
AGC014D 无言投下
ARC063F 矩形周长有一些性质
6.3
正睿三道不可做题,T1找了找规律,和题解大部分是一样的,加了个数据分治过了。
vp了CF1525,写了ABCDE
CF1525E 要求至少一个满足条件,除了容斥还可以枚举首个/最后出现的。如果枚举的是最后出现的那么前面可以任意,后面都不能出现,分别统计。
6.4
上午学校模拟赛,T1是大字符集的AC自动机,用主席树模拟转移数组。
T2的题面/样例有点问题,T3不会,也没有题解。
晚上CFedu,同样是5题,有人30多,有人200+(我),花了半个小时对拍结果是倍增变量写错了??
wee8(6.6~6.11)
6.6
晚上div2,每个题都WA过,最后20分钟看了E但是没想出来,rank700多
6.7
CF1439C 注意到一共只有log段,线段树上二分暴力找
CF1439D 考虑最后的分配方案,连续段之间是不影响的,枚举最后一段的长度然后dp。
CF1536E 降智题
6.8
正睿模拟 T1题意不明
T2要把树上的一段权值往下移一位,移完是个小根堆,树链剖分后注意到一段链最多只会改变两个权值,一共 \(\log\) 段,就做完了。
T3讨论下然后预处理一些东西的前缀和就能 \(n^2\) 了
看了看THUSC的题解,没地方交。
CF1148G 巨大讨论题
6.9
正睿T3 选一个权值和最大的点集使得在两棵树上都是连通块
刚开始想的是把边抽象成点跑最大权闭合子图,结果不好赋权,而且可以选出多个联通块
后来想到直接枚举一个点强制在连通块里,其他点向父亲连边跑最大权闭合子图就好了。
ARC068F dp
ARC078F 发现每次选一个团,直接状压。
6.10
ZROI509 发现答案最多只有100多位,枚举最高位的1后发现对后面的不影响(至少有当前位数个2),那么再枚举之前的一个答案判断能否构成新答案即可。复杂度\(100^2\times 6000\)
ZROI510 分治
ZROI511 中位数有个套路,把小于它的赋为-1,大于它的赋为1,那么一条合法的路径权值和为0,可以搞个dp。发现树高\(\sqrt n\),那么直接暴力修改。注意随机树高数值上可能比 $\sqrt n $ 大,数组要开大一点。
6.11
学校模拟,考了套好题
T1 树上选 \(K\) 条路径权值和为 \(S\) ,得分为 \(\frac S{K+1}\) ,且你可以把所有点权加上一个 \([0,T]\) 的常数模 \(LIM\) ,最大化得分
分数规划+dp我还是会的,不过只有30分(甚至因为没有spj爆零)
注意到加的常数可以分成n段,每段取最大的就只有n个,\(n^2\log n\) 就有60分了
正解是随机化。我们把这n个要加的常数随机排列,每次二分前 \(O(n)\) check 一下当前答案是否可行,复杂度 \(n^2+n\log ^2n\)(随机排列每次找比当前元素值大的元素,期望次数 \(\log n\) )
T3 两边取对数之后转化成找第一个在这个点上方的直线,整体二分+超哥树是两个 \(\log\) 的(偷懒写法),改成斜率优化+归并排序就是一个 \(\log\) 了
week9(6.18~6.20)
6.18
学校模拟 T1容斥+根号分治,其实这种插板法前不久在CF才自己做出过一道,场上脑子寄了
T2 统计不完整的链用斯特林数拆成组合数维护只能dp,转化成统计完整的链+二项式定理拆出来用树状数组维护要好一点。
T3 申必结论
6.19
T1 发现按贪心策略对于每个点答案改变量是定值,那么上数据结构维护
T2 缩点之后跑dp,有点麻烦
T3 这类题(求最小数的 \(n\),使得前 \(n\) 个数中满足某一性质的数的比例大于等于 \(p\) )通用解决方案:
假设现在考虑的是前 \(B\) 个数字,其中满足性质的数的比例为 \(A\),并且满足 \(\frac A B < p\),我们找到最小的 \(C\) 使得 \(\frac{A+C}{B+C} \ge p\),然后把 \(C\) 加到 \(B\) 上去,重新计算 \(A\) ,迭代这个过程,直到 \(\frac A B \ge p\),\(B\) 即为答案。
复杂度我暂且蒙在古里,这题好像很快,主要看这个性质咋样吧。
week10(6.22~
来金华一中了
6.22
ZROI604 按位确定+模拟
ZROI605 按位确定+猜结论
6.23
ZROI537 贪心题 申必最小割
下午模拟赛 T1 发现一个格点只有两种选择,于是最小割
T2 构造题,各种乱搞
T3 场上写的 \(m2^{\frac n 2}\) 讨论+fwt+容斥竟然过了,正解还要再加个枚举,复杂度\(m2^{\frac n 3}\)
6.24
学习了一下待修莫队(三维莫队),把块长开成 \(n^\frac 2 3\) 就好了
the end
后面都在正睿了 教练也不催我交总结 懒得写了