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签到题,讨论一下发现有两种情况:

  1. 只选一张攻击
  2. 不选的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 组合数学
这种凭空列一个奇奇怪怪的式子可以考虑组合意义

\[\frac{m!}{\prod_{i=2}^n s_i}=\frac{m!*a_1}{\prod a_i}\frac{\prod_{i=2}^na_i}{\prod_{i=2}^ns_i} \]

前面的可以枚举\(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题

曼哈顿转切比雪夫:

\[A(x,y)\Rightarrow A’(x+y,x-y) \]

切比雪夫转曼哈顿:

\[A(x,y)\Rightarrow A’\left(\frac{x+y}{2},\frac{x-y}{2}\right) \]

正睿模拟赛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

后面都在正睿了 教练也不催我交总结 懒得写了

posted @ 2021-04-19 22:03  lcyfrog  阅读(483)  评论(0编辑  收藏  举报