[DMY]2024 NOIP 模拟赛 Day 2
这场比赛难度明显远大于 NOIP 阿伟。
赛时
T1 看了一眼先写了个阶乘级别的暴力,然后用暴力开始手搓样例,观察所有满足条件序列的特点。
造了十几组以后我发现了很多性质:长 \(n\) 的序列数字 \(i\) 在所有答案中可能的位置有 \(\min(i,n-i+1)\) 种,数字 \(1\) 的位置可以确定,数字 \(i\) 的候选位置可以由 \(1\sim i-1\) 推出来……
尝试组合,我发现了一种基于数值从小到大依次填充的思路,加上数据结构优化复杂度可以到 \(\mathcal{O}(n^2\log n)\)。但是转念发现赋初值,清空,空间,循环顺序等一堆东西都需要考虑,十分难写,于是先去上了 WC。
上完以后开始写,写到大概 10:00 开始调,调到大概 10:15 不想调了,就弃了。
T2 等了 10min 除了暴力啥都不会,所以就把一个 \(\mathcal{O}(n^5)\) 的枚举写了。
T3 感觉思路大开。先写了一个复杂度 \(\mathcal{O}(n^3)\) 的 \(dp\),然后看上去十分可以用数据结构优化。
一开始以为要用二维线段树,后来发现只需要对每行每列都开一棵就可以了。
算了一下空间带上常数是 \(8\cdot n^2\) 的,时间是 \(2\cdot n\cdot k\cdot \log n\) 的,还没算线段树的常数。
写完以后发现挂了,调了大概 30min 还是没调出来,于是去写 T4。
T4 是我最不会的期望,写完 dfs 发现果然挂了,不想管了,交了个样例过不去的代码。
回去看 T1,把之前的代码都删了,开始重新思考思路,确立了几个步骤:
-
先确定数字 \(1\) 的位置。
-
赋值,对所有已知值做一次 LCS 和 LDS ,合理赋初值使得求的时候不会产生额外影响。
-
让求出来的值和 \(a,b\) 匹配,匹配成功则说明合法单重一定有一种方案可以这样填充,直接作为答案即可。
-
回到第二步。
此时已经 11:40 了,写完大概 11:57,还剩 13min ,我觉得可以调出来。
去改初值,数组定义,循环的 \(i,j\),总之改了一堆,最后也是成功的没调过。
赛后
总分 20+10+10=40,我看了看好像这一届除了一个大佬分数都 \(\le 60\)。
总的来说,难题还得多练,不能出现会思路不会实现之类的情况。