【游记】CSP-S-2021

CSP2021

有关时间表示

不存在 Day 0, CSP 考试当天是 Day 1, 前一天是 Day -1

Day -5

如果有空闲的话, 希望能够熟悉一下基环树的处理, 打一打树剖, 做点容斥

大坑: 8级的原根、BSGS、网络流、SA、Manacher、AC 自动机

Day -1

想着考前好好打一次板子,结果写了并查集和最小生成树之后,负环就开始卡了,于是滚去颓废了。

与以往不同的是,我爹我妈这次一起送我。中午吃过饭后出发,下午到了宾馆。安顿下来后,我们去了万平口。

“海浪拂过的地方,送上来些许贝壳,那里的沙子被抚平了。海拥有如此强大的力量,是因为它是无数个水分子的融合。”我这么想着,想到了自己的小团体。

“为什么沙滩是沙滩而不是石滩?石滩都堆成陆地和岛屿了。大陆已经这么久没有变迁了啊。”我这么想着。

我在海边留下了脚印,也许代表了我来过,来过这里,来过日照,来过山东外国语职业技术大学。

宾馆对面的街边有几家饭馆,我们在那里解决了晚饭,包括 Day1 的早饭和午饭也是在这几家店解决的。

晚上没有复习。

Day1

上午写了写FHQ。

下午,来到校门口,与大家见面,合影。

入场。

CSP2021 场上

T1读了7min,觉得仿佛是单峰。

读T2,麻烦的DP。

读T3,麻烦的DP。

20min+ 过去了。

读T4,啊网格图啊附加点,难道是斯坦纳树?可是我已经忘记板子怎么写了。啊反正不可做。

30+min 过去了。

想T1。对于国内,廊桥停放机次肯定关于国内廊桥单调不降;国外同理。不妨拟合成单调递增的一次函数 (y1=k1*x)(y2=k2*x),设 ( m y) 表示最终的答案,( m x)表示分配给国内的廊桥,(n-x) 就是分配给国外的,所以 (y=k1*x+k2*(n-x)=k2*n+x*(k1-k2)) 。呵呵,这玩意有个P的单调性。

先去给T1写个暴力。

不知道怎么回事写挂了,瞪了一会眼之后我果断重构,换了换 if 嵌套的顺序就没问题了。

90min 过去了。

这个时候,通过第三个数据,我发现答案不是关于分配给一方的单峰函数,然后我就蒙了。考虑增量?用(分配的廊桥数量)个链表维护停进廊桥的飞机?算了算了,我还是先去打剩下题的暴力吧。

根据题面的劝退程度,我选择了T3。T3写完之后就只剩下 30min 了,也就是说我 T3 一共花了 120min,而我仅仅是打了爆搜、手玩 1 组 (n=5) 样例和一组 (n=20) 样例,写DP,扔DP,用队列写DP,然后过了样例,由于暴力只会写 (2^n) 并且不会造合法数据,我没法拍。于是把STL队列改成手写队列,扔。

估计脑电波最死的一段时间就是思考 T3 怎么DP的时候了...我总是这样,一次次走到死胡同,然后退回去,然后再走一次...无论是题目、是游戏、是学习方式、还是生活态度...T3 的思考角度,我是考虑回文中心还是首位?是考虑由给定序列推回文序列还是考虑回文序列如何构造出一个给定序列?(T=100, n=1e5) 这看起来像是诱人的 (O(n)),然后我大概发了 20min 的呆,才想起来去看多项式复杂度的部分分,这个 (n=100) 大概写个三次方四次方的DP吧。但是我脑子里没有一个简单的状态设计蹦出来。想起校内试机赛,别人一眼的DP,到我这里也是发呆。

考虑我前面取了连续的一部分,后面取了连续的一部分,取出来的数字一定对应在原序列中间连续的一段。用这个来DP,记录前面取了 [1, l],后面取了 [r, 2*n],中间取了 [i,j] 满足前后数字集合等于中间数字集合。(O(n^3)) 枚举状态,(O(1))转移。这样看来DP过程就挺简单了,但是写起来繁琐。我写了一半就不想写了,而且感觉开 (f[l][r][i]) 浪费空间,于是就打算拿 BFS 写,开个队列放已知状态,每次往外扩张。

具体地,我写一个结构体:

struct Op{
    int l, r, i, j, tp;
}

一开始我把单个结构体塞进队列里,一个状态 pop 掉之后就没了。但是我忘记考虑输出方案了,所以我给所有状态存下来,也就是这样子:

struct Op{
    int l, r, i, j, tp, pre;
}P[10000010];

给所有状态一个编号,然后把编号塞进队列里,pre记录转移过来的状态用于回溯答案。由于我 BFS 内的转移时先考虑 L 操作再考虑 R 操作所以我第一次找到的结束状态就是答案。结束状态就是 l+1=i,j+1=r 的状态。

唉就是这里的代码写的很烂,写了改改了写,让我觉得“我废了”。

210min 过去了。

给T2打一个爆搜。

CSP2021 送走我...

读完题,我向自己确认"廊桥是一样的对吧,只需要知道当前空出来能用的廊桥数量即可吧,不需要区分每一个廊桥。"赛时脑子里关于 T1 , 蹦出来了大概有"取模(即分组)"、"链表"云云的关键词,意思是把廊桥视作不同的,考虑一个廊桥上停放了哪些飞机。但是每当这个想法升起时,"廊桥没有区别"的声音就会把那些想法打消... 赛后我看民间题解,考虑每一个廊桥的停机情况却是解体的关键... 怎么说,是自己限制了自己的思考。

Day After

T3 没有证明贪心,只发现了可行性没有证明唯一性,所以把一堆乱七八糟的东西塞进了队列,然后洛谷数据100->44, loj数据40

唉唉我真傻 我错是认为BFS协助的是DP,却不知这个题是贪心。

Else

附赠 Palin 题解

原文地址:https://www.cnblogs.com/ZhengkunJia/p/15470900.html