游NOIP2023

· · 个人记录

Day -1

这段是在lcez写的,就是有点挤,其他都还行。

面到sym神了,芜湖!

Day 1

芜湖,终于开考了。

8:40看完了四个题,然后我也不知道了(并没有)

8:28准时开题,先看了T1,这不傻帽题吗?

8:29看完题,8:31想出来了,直接排个序后记一下,然后记一个前缀最小,后缀最小,然后比较一下,做完了!

8:38写完了,8:40测完大样例全过了,然后去看了T2!

T2首先一眼可以算出每个变量等于或不等一开始某个变量的赋值,然后这个东西大概可以扩展域并查集,但是我懒,觉得并查集太难写了,于是建图赋边权。

然后这个东西很奇怪,点不能按每个变量建,得按操作顺序建(就是按第几个操作向第几个操作连边),如果操作为等于(假设a=b),那么就理解为这个操作的值取决于b上次被赋值的操作的位置,于是从当前操作的位置向上次b被赋值的位置连边,边权为1;如果为不等,跟1操作一样的,只不过边权为-1;然后就是等于某个具体的值,这个你可以一开始有三个变量为n+m+1,n+m+2,n+m+3然后连向他们就好了。

那么最终一个点的取值是不是就是这个点在操作中最后一次被赋值的点最终能走到的点,对吧。(有个小细节,一开始我们认为所有变量均被赋值过一遍)

这地方为了方便,我建的是反边。

上面这部分写得挺慢的,大概写到了9:05。

然后就是具体的,怎么才会是U?通过模拟最小的小样例得知,如果说最终一个点不等于这个点,那么这个点得是U,或者说一个点最终等于U,那么它就得是U。

(如果说已经确定一个点等于U了,那么所有等于/不等它的点也都得是U,于是得到一个点是U后,必须遍历它能到达的点都为U)

码码码,到了9:23。欸,小样例过了,然后忘了是第几个样例挂了,U算少了,画了一下图发现,我写的程序是没有错的。然后看了一下,欸,居然有负环!

于是我马上就很慌了,原来不只是自身不等于自身,所有负环都不行啊,这可是难写多了。

但是我又意识到他是一个奇环森林,于是我用了个很sb的行为,用了一个以前听过但是自己从没写过的缩点,就是dfs然后用栈来搞。

写完这个大概10:00了。

它过掉了除最后一个点的所有样例,最后一个大样例它错了,我立马就急了。调调调,最终通过我不懈的输出中间变量(大概10:15意识到的),最终得出结论我tm找环写错了

我就不该在考场上写自己不会的啊,于是我立马换成缩点(这地方由于是奇环森林和这个题的特性于是可以建无向边),写写写,10:40过全部大样例了,此时心态良好。

T2写得非常长,177行!

开T3!一眼不会,什么东西,写了个要求一个序列一定严格小于另一个序列。

然后10:47开T4,先想的是一个暴力dp,设f_{i,j}表示到了第i个点,已经连续了j天走,能有的能力最大值,转移就考虑每位往后顺移一位,f_{i,0}为所有数的最大值,同时清空第二维为k以上的dp数组,然后在每个点上挂一个vector表示以这个点为结尾时的奖励能力值区间有哪些,然后就是一个后缀加。然后没写这个dp,因为想着可以优化。

接着想性质A大概可以矩阵快速幂(但实际上这个是错的),觉得太难写了就没写。性质B大概可以贪心选如果选上优就优(实际上这个也是错的),性质C大概可以直接dp(实际上这个也是错的)(。。。也就是说我的特殊性质想的全是错的,还好只写了B)

继续想那个dp大概可以优化,考虑能不能用线段树优化,考虑到不行(全局往后移这个操作太傻*了,根本没法维护,也没法打标记)

欸,立马意识到可以平衡树,每个点维护一个自身权值,子树max,和子树加的懒标记就可以了,然后每次先都-d,插入就直接往左插,如果子树大小大于k再删掉最后一个点,再搞个子树加上奖励的,就可以了。

想到这是11:25,看了眼有56pts,很激动!于是开写!11:38大概就写完了,我之前从没写过平衡树维护区间加这种懒标记,于是我先自己造了一组最简单的,就是2天,最多走2天,走1天1,1-1天都走有5权值。

一测,果然寄了,输出了5。

直接输出了所有东西啊啊啊,所有东西啊!整棵树都输出了,1号节点和2号节点都没有5的但是最大权值却是5,然后就调了好久。

12:10意识到原来如此,我的0号节点权值应该赋值为-1e18啊,一改,果然过了,然后小样例也过了,大样例WA了(怎么回事呢),原来是一个地方写错了,改了后就过了。然后立马把我的贪心性质B写了上去,然后过大样例了,很安心,觉得有64pts了。

12:20火速回来看T3,首先意识到得写暴力了,不能想太多,于是先把操作序列复制一遍,然后改,如果a_1==b_1无解,否则如果a_1<b_1那么整个序列都得小于;反之,都得大于。于是先把这个给判掉,然后就想到可以dp,设f_{i,j}表示第一个序列匹配到了第i个,第二个序列匹配到了第j个,每次可以两个同时往后一个,第一个往后一个或第二个往后一个,然后就行了。

写写写!12:40写完了,惊险!过了大样例。

开始检查,okT1没问题,okT2没问题个鬼啊,自己没检查出来,okT3没问题啊,okT4没问题啊。

立马加上曹神和sym ak noip!

着重检查了第1,2,4题,又测了一遍大样例。

在12:55的时候,老师提醒了建文件夹的问题,还都检查了一遍。我等他检查完我的后又测了一遍最大的大样例,确认没有问题。

12:58时还是不放心,又编译了一遍,都没错,立马删掉exe文件。

13:00 结束了!

出来后本来还想等等sym的,结果没等到,然后就直接出来了,cxm神335!太强了!

于是估分:100+100+35+64=299

在车上,山东代码很快就出了。

先是信友队出了T1数据100,然后等了好久好久云豆出了T1,T4数据100和56。一问原来没有考虑相邻的情况,大样例都过了,希望CCF的数据水一点。

然后云豆又有T3数据了,35,没问题。

回家后洛谷也有了也没挂,hyt说还有核桃,核桃倒是没有挂分299。

之后我突然想起小屠零,一输入,怎么只有前2题数据啊,一看

190!

?我tm这么多民间数据都过了,到你这T2怎么90WA了? 一检查,md啊啊啊啊啊啊啊啊啊啊啊啊啊啊,多测没清空,因为在上文我用到了n+m+1,n+m+2n+m+3,但是没有清空他们导致自己挂了,hyt帮忙拍出来了,结果我改了这个地方后就过了。

1000组大概拍出来30多组错的,希望CCF数据水一点!

同时意识到我T4那个dp是有多sb的行为,第二维如果说改为[j,i]之间都走了那就56分比这好写多了,只用线段树,然后100分离散化一下就做完了。

Day 11-24

出成绩了

100+100+35+64=299

谢谢你CCF!