【游记】NOI 2022 联合省选 场外游记

下午才拿到的题,本以为考后半个小时就能拿到,结果裂开。

Day 1#

开题看到三个传统题。前两题只有 10 个测试点,看样子很没区分度的样子(

看第一题,woc 手写编译器是什么离谱的模拟题。

仔细看一下大概是让你自己实现 define 语句。指令数和长度都很小,并且保证答案长度 1000,这不直接模拟就行,大概是把每个标识符段和非标识符段抠出来,前者放到栈里,每次取栈顶看能否用 define 展开,后者直接输出即可。

然后看第二题,大概是树上路径计数,分别求合法路径数和合法路径权值和。n 很小 r 很大。

想了一下,感觉是枚举路径上的最小值然后统计,如果最小值为 x,相当于每个点的 [l,r][x,x+k] 取交然后统计答案。还要删去没有取到 x 的方案,也就是对于 [x+1,x+k] 要再算一次。

那么问题就转化为没有差值限制的方案。直接跑树形 DP,f,g,u,v 分别表示经过点 x 的合法路径数,从 x 开始合法路径数,以及 u,v 表示对应合法路径权值和。

x 的范围会很大显然不能每个都算一遍,但是 n 很小,直接拉格朗日插值即可。每个 [l,r] 最多拆出 5 个区间,大概是 5n3 貌似可以过。

看了下才过一个小时,开始看 T3。题面令人大受震撼(怕不是某个 luogu 管理出的题目

很明显的图论特征,消息 xy 连边,边权为 yx 后面产生的贡献,那么我们要求的就是最长简单路径,直接状压就能过前两个点。

分析一下,等价于每个点只有一条入边一条出边,那么我们跑费用流,对于每个点,从源点连一条边再向汇点连边,然后再连 xy 的边,边权只有 1/2 两种可能。

接着回去肝前两题代码,第一题写了 50 分钟,字符串处理有点恶心,很担心数据里可能会有多余空格和行末空格,content 可能为空,也可能有空格,空格段的长度可能不为 1

然后写 T2,虽然插值和 DP 代码不长,但是细节不少,写起来极度折磨,调完已经过去三个小时了。

然后开始写 T3,写到一半才意识到不对劲,这 tm 不是有负环的费用流吗,并且定义和负环流不一样,不能够走带负环的增广路。

然后就开始各种奇思妙想,后来发现再把每个点拆点 xx,可以保证每个点只在路径中出现一次,虽然图会有负权环,但是这张图如果走了负权环就一定流不到汇点。然后再跑带负权环的费用流?好像是强制选所有负边权然后退流,想不太清楚,感觉要翻。

回去翻看下前两题代码。猛的意识到求前缀和多项式的次数要 +1,如果 fn 次多项式,un+1 次多项式,前缀和是 n+2 次,所以要插 n+3 个点,自己少插了一个点(以后写插值不管怎么先多插几个点肯定没事

大概还有 30 分钟,不大敢莽第 3 题,主要是只看过没写过带负权环的流,细节也没搞清楚。干脆写 8 分的状压算了。

写完还有一刻钟,看 T3 哪还能拿点分,很快昂,这性质 B 不是告诉你第一问答案。离大谱直接输出非学术消息总数有 20 分比状压分还多(笑哭

希望不会挂分。

Day2#

开题发现题目都不长。

开 T1,发现值域很小,那么 n 必然没用,直接开桶。

要求方案使得每个质数都存在一个倍数,根据套路显然是容斥,考虑枚举哪些质数没有倍数,剩下的数产生 2cnt 的贡献。

值域 2000,筛一下有 300 个质数,必不可能直接容斥,还是套路,我们容斥 2000 的质数,剩下的质数两两之间互不干扰,可以线性递推过去,那么我们只用预处理 fS 表示集合 S 里的质数的倍数集合的大小,再预处理 gS,x 表示删去集合 S 里倍数后,x 的倍数有多少个。这部分预处理的复杂度是 14×214×305+214×2000ln。感觉卡不满,递推的复杂度就是 2min{ci,14}×max{0,ci14}

感觉能卡过去,就去看 T2。非常令人智熄,居然又是一个括号变化,和 WC2022 怕不是同一个出题人(当为民除害)

必然先建树,操作 2 就是将一个点的儿子随意排列,且花费代价,操作 1 就是合并相邻两个儿子,再将右儿子的权值接到合并后的点下面。

合并的总数必然不变,所以必然是从上往下合并,这样层的决策集更大,决策不劣。感觉想到这里不难,难道今年题目比较简单?

貌似有个 x=0,y=1 的部分分,手算一下就是每层把最大值留下,其余下放,直接用堆模拟一下即可。

感觉有戏,模拟一下 x=1,y=0 就是把最小值留下,其它下放。然后是 x=y=1,大概是每次用最小值做 A,其余做 B,但是最后会把最小值留下来肯定亏了。但是可以交换顺序,所以最后一次下放交换最小值和最大值的位置,那么就能把最大值留下,代价不变。

感觉挺对的,就去看 T3。树上问题,按顺序删边,答案最优,N2 算法,woc 树上的数既视感,这怕不是和树上的数一个出题人(当为民除害)

再一看毒瘤出题人就给了一个小样例,太离谱了。不过直接枚举全排列不难写可以直接对拍。

非常没有思路,就先回去写 T1,没给大样例,自己造几个,大概 0.4s 不慌。

然后写 T2,特别好写代码就 20 行,并且一次过了 3 个样例,让人大受震撼。

然后想 T3,一点思路都没有非常折磨,愣是瞪了一个小时。

后来偶然翻到这题的空间限制是 2G,woc 这怕不是 NOI 史上空间最大的题。那 T3 比要开大数组,大概是 kN2 的空间?那必然是 DP 跑不掉了,看来前面想那么久的贪心可能性不大。

又推了半个小时得到一个 N3 算法,大概是 f[x][y][z] 表示已 x 为根的子树,删除 x 的父边,边的两端分别是 y,z。由于每个点的度数 3,讨论 6 种可能的先后顺序就行。

看下时间还有 90 分钟,还是回去测 T1,T2。

造了几个能卡满的大数据发现居然要跑 1.8s,没想到居然还是个毒瘤卡常题。然后就开始了及其折磨的卡常环节,现实优化取模,循环展开的常用技巧,大概卡到 1.1s,一直卡不进一秒,并且本地配置大于 CCF 机子,那岂不是当场暴毙。

后来把数组顺序换了一下,gS,x 变成 gx,S 居然快了接近一倍,只用 0.6s 就能跑完,震撼我一整年。

然后看 T2,突然发现贪心有致命漏洞。x=1,y=0 的时候保留最小值不一定是最优的,因为如果后面某层突然加了很多括号,并且权值很大,那么可能保留次大值,然后把最小值传下去。

太折磨了,最折磨的事莫过于最后 30 分钟发现自己思路错了,就跟进了教室发现没带书包,到了火车站发现没带身份证一样(

没办法,临时写暴搜,每次搜是传最小值还是次小值,大概是 2nlog 复杂度,实际跑不满,然后就实在没时间了,希望 x=y=1x=0,y=1 的贪心不挂。


这次模拟还是能发现了一些问题的,比如有些基础确实是不过关,拉差写起来和挤牙膏一样写了两个小时,还不算调的时间。过于自信没有严谨的推导和验证思路的问题,导致出现结束前半小时发现思路挂了的问题。

真的省选还没开始,希望这次模拟能有启发和警醒的意义。

Updata:2022/4/18

根据各个 OJ 的民间数据没有挂分 100+100+28+100+48+44 ,希望 D2T2 能多点 x=y=1 的数据这样又可以骗几个点(

根据网上的讨论和个人对难度的估计毒奶一口,强省队线大概在 600 分左右,高分在 800 左右(包括 NOIP)

Updata:2022/4/19

官方数据 100+100+18+100+40+44,D2T2 的数据分治写挂了/ll,D1T3 数组都能开小,裂开

作者:7KByte

出处:https://www.cnblogs.com/7KByte/p/16158626.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   7KByte  阅读(2995)  评论(4编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示