CSP-S 2022 又寄

一年更比一年寄。

Day -2

关于 CSP-S 2022:

  • deque<int> q[1000001] 了。

既是全省第一,又是全省倒一,开摆!

Day -1

关于 CSP-S 2022:

  • 它 NOIP 了。

Day 0

打板子,主要复习字符串算法,因为模拟赛做得少。

Day 1

到华山饭店考试。

14:00 试寄。为啥是 32 位寄?考 __int128 直接大寄好吧。用 release 模式编译居然无法运行,只能用 debug 模式。

14:30 收到 pdf。四道题目时间限制分别是 2s、1s、2s、3s,感觉有数据结构题。

整体看一下四道题目,T1 图论,T2 博弈,T3 图论,T4 树。

稍微想一下。T1 感觉是 DP,但没法做,只会 \(O(nm + n^4)\)。T2 好像和博弈论关系不大,B 只可能选最大或者最小,如果 B 可以选择正负,结果一定为负,所以 A 只会选最小正数或者最大负数,如果 B 能选的数全是正数或者全是负数,A 只会选最大或者最小,用线段树维护这 6 个最值就行了。T3 题面很长,但估计会 40 分。T4 算错复杂度,以为会 52 分。

14:55 开始写 T2,15:20 写完并通过所有样例。

开 T1。数据范围是 \(2500\),大概是 \(O(nm + n^2)\)。发现这是无向图,\(1\to A\to B\)\(1\to D\to C\) 是对称的,可能是折半,但是不会合并。

想到可以钦定 \(A < D\),枚举 \(B, C, D\),可以做到 \(O(nm + n^3)\),有 70 分。

然后想怎么 \(O(1)\) 合并,想了很长时间没想出来。

现在四道题估计 \((70) + 100 + (40) + (52) = (262)\),相当的寄,勉强上 250 分。

既然 T4 估分挺高的,先润 T4 吧,结果发现时间复杂度算错了,对于 \(k \ge 2\)\(O(n^3 + q)\) 的,寄了,只有 36 分,那只有 \((70) + 100 + (40) + (36) = (246)\) 了。

所以 T1 非 AC 不可了。又想了一会儿,发现只有 \(A = C, B = D, A = D\) 三种情况需要特殊考虑。首先排除 \(A = C\)\(B = D\) 的情况,因为这相对好处理。当 \(A, D\) 取让 \(1\to A\to B\)\(1\to D\to C\) 最优的点时,可能 \(A = D\),这时只会让 \(A\) 或者 \(D\) 改为第二优的点。考虑最坏情况,\(A_1 = C, D_1 = B, A_2 = D_2\),此时选择一定是 \(A_2, D_3\) 或者 \(A_3, D_2\),所以只需要维护前三大的值和对应的 \(A, D\) 点就行了,复杂度是 \(O(nm + n^2)\),能过。大约 16:00 开始写,16:20 左右写完并通过所有样例。

这时估计 \(100 + 100 + (40) + (36) = (276)\),去做 T3。

一开始以为只有形成若干个环时才是 YES,看一下题目里面的图,发现只需要每个点出发都能走到环上,不一定每个点都要在环上,那就是基环内向森林。40 分显然可以 \(O(qn)\) 暴力做。然后想没有 2 和 4 操作,也就是每次只增加或者删除一条边怎么做,发现基环内向森林等价于每个点出度都是 1,所以只要维护出度就行了。没有 4 操作,也就是删除边的总数不会超过 \(O(m + q)\),2 操作可以枚举入边来删除。对于每个点维护两个 set,分别存有效入边和无效入边的点。时间复杂度 \(O(qn \log n)\),对于测试点 9~12 是 \(O((m + q)\log n)\),可以通过 60 分。

下面一个部分分是 \(n \le 10^5\),感觉是给根号做法,那 \(n \le 5 \times 10^5\) 估计就是线段树之类的数据结构。但想了一会儿发现根本没法维护,就去打 60 分暴力,打完大概是 17:05。

T4 想了一下 \(O(n^2 + q)\)。想到一个 DP,发现是 \(O(n^3)\),和暴力同分。然后猜了一个结论,选的点一定在 \(s \to t\) 路径上,并叉掉了这个结论。事实上,\(k = 2\) 时这个结论是对的,因为走到路径以外必然多走一个点,肯定不优。大约 17:25 开始写 36 分大暴力,写完发现样例没有 \(k = 1\),就把样例的 \(k\) 改成 \(1\),用 \(O(n^3 + q)\)\(O((n+q)\log n)\) 拍,没拍出错。

这时大概是 18:00。感觉 T1 大样例答案才 3908 不是很靠谱,看了一下 T1 的代码。不看不知道,一看吓一跳,第三大值的更新是假的,而且预处理写了 for (int i = 0; i < 2; ++i)。改了过来,又测了一遍样例,过了。还好看了一下 T1,不然就大寄了。

然后看了一下后面三题的代码,最后十分钟检查文件操作。

出场估分:\(100 + 100 + 60 + 36 = 296\)

右边的人估分 \(100 + 100 + 60 + 52 = 312\),这下我怕不是一等奖都没了。

出考场遇到了 clf,他估分 320+(orz),yx 估分 350(orz)。

晚上水洛谷,上面说人均 300+,大寄了。

自闭。

测了一下民间数据:

  • 洛谷:\(100 + 100 + 60 + 36 = 296\)
  • infoj:\(100 + 100 + 60 + 36 = 296\)

希望不要挂分,挂分就直接挂大寄了。

看题目做法的讨论,看到 T3 用哈希就口胡出来了,而且之前模拟赛做过一道随机权值 + 异或哈希的题目。

T4 正解是点分治或者动态 DP。

Day 3

补完了 T4。

民间省内排名:

  • infoj:34 名。
  • 小图灵:41 名。

很有可能比去年寄。希望造数据人不要摆烂,摆烂我就真的寄了。

update

T3 造数据人摆大烂了,全部输出 NO 有 45 分。

省排名 38,寄。

总结

做 T1 花了 1h,时间比较长。

T3 看数据范围 \(5 \times 10^5\) 感觉是 \(O(q \log n)\) 的数据结构,完全没往线性做法上想。

T4 没有想到 \(O(n^2)\) 做法,猜出一个假结论之后没有分析 \(k = 2\) 时的情况。

这场比赛暴力分很足,暴力打满是 \(100 + 100 + 60 + 64 = 324\) 分。

但是,如果 18:00 之后继续想 T4 的 \(k = 2\) 的 20 分或者 \(O(n^2)\) 的 16 分,可能 T1 FST,所以还是要检查代码。

posted @ 2022-10-30 13:38  猫猫NOIP2006  阅读(349)  评论(0)    收藏  举报