国庆比赛总结

比赛

10/02 挂分最狠的一集
10/03 不会T2
10/04 不会T2但会T3这一块
10/05 xmyz
10/06 jsyoi 华丽地连T1也不会
10/07 怒写2hT2大模拟获得6pts高分,赛后重构30min直接A掉

比赛策略

问题

- 开题顺序。
1.几乎每场比赛都是顺序开题,先看T1,然后写T1……
- 心态问题。
1.感觉自己很容易就是想一道题然后想1h之后没有结果的话,就开始摆烂,不想写题,也不想思考,容易陷入一种无所事事的状态里。
2.如果自己一直做不出来什么东西,但是身边有人在敲代码的话,就很容易很慌,然后脑子一片混乱,实际上什么都想不出来了。
- 其他
1.一些题很显然的性质,发现不了,或者是发现了这个性质,但是写着写着就忘掉了。
2.每次都是我先看看下一题,一会再写对拍,但是事实是每次都不写对拍。
3.对于某些看似很简单,实则码量巨大的题,容易陷进去,但是还想不清楚细节,最终导致挂分。

一些建议?

1.开始考试之后,先把左右题都看一遍,然后自己大概过一下那道题感觉上更好一点,接着再开始思考和写代码。
2.冷静下来,不要被外界环境干扰,必要时可以给自己一些心理暗示。
3.思路卡住之后,就不要一直死磕,如果1h还毫无收获,及时跳出去,先把其他题的部分分写了。
4.对于一道题,从多个角度分析一下,然后性质什么的可以写到自己代码最后面。

一些血与泪的教训

1.写特判,赋初值的时候,想清楚再动手。——出自10/02 CSP模拟赛 萝卜刀大师
2.推式子题,一定要主意每一个细节,还有取模什么的,记住了。——出自10/02 CSP模拟赛 T2
3.写代码想清楚再写,如果发现自己写出来的代码就是一坨,别硬撑着往下写,这种代码只会硬控你两小时,及时重构。——出自10/07 T2
4.结构体写 o.push_back((node)(a,b)) 喜提CE*1。——出自[10/02 T4](1002CSp--模拟赛 - 题目详情 - jzoj)
5.警惕某些大模拟的边界条件,大样例较水的时候根本查不出来,但是多测,于是喜提0pts。——出自[10/07 T2](1004Csp--模拟赛 - 题目详情 - jzoj)
6.vector不先判断一下size就 if(o[0]>...),喜提RE*1。——这个没有出自,赛时调代码的时候硬控我10min,但也可以是出自[10/07 T2](1004Csp--模拟赛 - 题目详情 - jzoj)

7.要注意数据范围,有可能隐藏了某些信息,而且看到某些固定的数据范围容易分析出最终算法的时间复杂度。——出自[10/04 T1](1004cSP--模拟赛 - 题目详情 - jzoj)

8.切记不要

bool flag=0;
...
if(flag) flag=2;
else flag=1;
cout<<ans*flag<<endl;

——出自[10/04 T3](1004cSP--模拟赛 - 题目详情 - jzoj)

有人问我为啥没有每天比赛的分析,所以我来写了。嗯,是这样的。

逐日分析

Day 1

T1 萝卜刀大师

显然,当且仅当一个小朋友能从1号小朋友到达的时候,才有可能是最终的萝卜刀大师,所以直接建返图,然后跑个什么东西盼连通性即可。
需要注意的是,如果1号小朋友有出边,那么一定是要有一个环能回到1号小朋友这里才可以,所以最开始的时候1的flag要赋初值赋成1。反正就是一些细节问题是需要注意的。

T2 毛球发动特攻,发出了残酷的纽扣

这题推式子,我们考虑对于区间 \([l,r]\) ,其中有 \(k\)\(1\)。那么如果有 \([l1,r1]\) 满足 \(l\leq l1\leq r1 \leq r\),同时这两个区间所含有的 \(1\) 一定是同样的 \(k\)\(1\),那么后者的方案一定出现在前者中。然后,考虑 \(1\) 不一样的方案,我们考虑每次往右移动一个位置,那么显然最后那个 \(1\) 还在原位上的方案是会被统计的,所以我们容斥一下,所以做完了。
赛时推出来的,但是容斥的时候其实是有 \(k-1\)\(1\) ,然后代码里写的是 \(k\),所以G了。喜提20pts。

T3 开颓

考虑树上背包,显然一共只会有两种状态,就是这个点的子节点可以同一成为同一个颜色,或者他们可以随便变颜色,否则的话,上面的点对这些点的颜色的更改是统一的,如果下面颜色还没有同一,就G了。

\(dp_{i,0/1}\) 表示当前点的儿子们分别成为上述两种状态的最小代价和,然后转移转移。

然后考虑输出方案,这很困难了,但是我们还是会的。对于每个点,如果你无法确定它是由下面的哪个点转移而来的,你就递归下去,知道可以确定这个点被选了,这时候直接输出即可。

这题还有一个喵喵Kruskal做法,但是我不会,回来学一学。

T4 木结构道路

建最短路图,跑两遍,然后做完了。

赛时写了30pts,但是由于上面提到过的结构体push_back的问题,CE了,痛失30pts。

T5 奥运公交

拓展题,讨论出来的做法的直接维护一条最短路,然后只有这个上面的点翻转是有影响的,然后就做完了,但是还没有去写。

Day 2

T1 组模拟赛

每个点有一个区间,在每个区间确定一个数,求最小极差。

这题 \(n^2\) 是容易想到的,然后你考虑,你每次都是对于同一个区间选择同一个点,只有一个区间的点会改变,那么,你每次更新一下,转移一下满足条件的区间的右端点,做完啦。

T2 黑暗森林

每次往树上加一个点,然后求直径+除了直径外的最长的子树长度。

有一个lca的性质是赛时没有想到的,然后就G了。

事实上,你只需要维护答案的三个点,然后每次你都对着那玩意更新一下,看会不会更优秀,然后取最优的那个就可。

T3

不会

T4

不会

还是太菜了吗。

Day 3

T1 循环卷积

这题你看数据范围容易发现,最多就只有5000个数,所以我们直接对着这5000个数跑就行,反正剩下的都是0,然后最后和这些数的maxx取个max即可。

T2 异或平方和

赛时连T2都不会,我还是太菜了。

你考虑对于每一位的贡献分开计算,然后用一个平方和公式,然后多带两个log,然后做完了。

T3 巧克力

嘿嘿,这题考场上的解法是对的。

注意到 \(n\le 500\) 容易想到区间dp,我们设 \(dp_{l,r}\) 表示区间 \([l,r]\) 都已经被吃掉的方案数,考虑转移,枚举区间的断点 \(k\),让 \(k\) 最后被吃,那么,如果 \(a[k]=a[l-1]\)\(a[k]=a[r+1]\) 的话,显然是 GG的,然后考虑会不会和子区间最后一个转移的数重复,显然是不会的,因为如果重复的话,子区间那里就转移不到,更不用说往上来了。

然后你就写一写,调一调,还要注意不要想我一样写bool flag=2;cout<<ans*flag<<endl;,然后就没有然后了。

T4 河流

容易发现,正着做是不容易做的(你都思考了那么久正着做都不会可不是不容易做吗),所以考虑反着做,那么,对于一个点,不合法的方案数显然是 \(C_{chu[i]}^{2}\)

那么考虑这个出度怎么维护,然后发现,你每次反转一段区间内的线段,其实就是反转一下这些边,那么,用线段树维护,每次区间亦或1 ,这不就做完了吗。

好吧,其实我也就是调了一万年还没有调出来罢了。

Day 4

花式出锅

T1 记者

打表观察容易发现,最多到 \(n=10^6\) 时,就G了,后面的一定是No,所以我们就预处理一下 \(2\times 10^7\) 以内的质数,然后大于这个区间的直接输出 \(No\) 就做完了。

T2 重生

容易发现,除非 \(a_i=b_i\) 否则一定对答案没有影响,所以我们只关心 \(a_i=b_i\) 的对即可,然后,我们直接对于每一个值,把相等的 \(a_i,b_i\) 的位置塞进去,然后跑一下这些区间,结束了。

但是不要忘了最后塞进去一个 \(n+1\) ,否则统计不到最后一个区间。

T3 棒棒牛轧糖

好了作者,求你别骂了。

首先你要知道一条性质,那就是,对于 \(x\le y \le z\),则 $x \oplus y\ge \min(x\oplus y,y \oplus z) $

那么,我们直接 trie树上dp,然后跑一跑,然后做完了。

T4 不会

Day 5

jsyoi

T1 编辑字符串

所有的能相互到达的点为一个环,处理出来所有环,然后每个环里最多有1个1,就看剩下的这个1能不能和其他的1对称即可。

T2 遗失的赋值

对于这题,我们考虑,每个点只有两种值,然后对于是可见的,就要求前面选择的可见的所有值的和+当前点的时间是小于最终时间的,对于不可见的,要求所有前面的点和后面选择的可见的点小于总时间,然后dp求方案数。

T3 中位数

我们把比当前数小的数的值改为-1,比当前数大的改为1,那么,容易知道,当且仅当有一段区间,区间和为0,这个数可以成为这个区间的中位数。

所以,我们可以用线段树维护这些值,我们按照 \(p\) 的大小,依次插入这些数,那么,每次这个数和下一个数,我们都对后缀和减一即可。然后就做完了。

T4 树上查询

不会啊,T4什么的还是太困难了。

Day 6

T1 谷仓配对

水题,对于谷仓,求一个相同偏移值的对有多少个,然后答案直接对着这些取min即可。

T2 句子序列

可恶的大模拟,硬控我2h。

首先,我们容易发现,当及物动词和不及物动词确定的时候,句子个数是容易确定的,然后我们发现,及物动词和不及物动词都是 \(10^3\) 那不直接 \(n^2\) 做完了,还真是,然后你就只需要调亿点点细节就好了。

T3 看电影

dp的优化,好题,就是我不会。

首先,\(n^4\) 的dp是个人都会,不写了,然后是 \(n^3\) 的dp,就是显然你会发现,在最终结果相同的情况下,显然是用冰激凌减 \(x_i\) 更小的更划算,所以你把它按照 \(x\) 排序,然后跑dp,这样显然更优秀。

那么,你知道了这个之后,剩下的显然也就很容易了,对于考虑最后一定是对于前面很长一段用冰激凌,然后后面用货币,只有一个数是同时用冰激凌和货币的,那么,你只需要对着从前往后和从后往前分别跑一遍背包,然后枚举中间的断电,那么答案是易得的。

T4 机器人转转转

考虑你让机器人一直动,然后决定要再哪个激活点上面放机器人的话,十分困难,所以我们换一种思路。

我们更换参考系,变成让机器人是静止的,激活点转起来,然后你要不停的变换位置去放机器人。

由于 \(n\le 20\) 考虑状压,则 \(dp[S][i]\) 表示当前 \(S\) 内的机器人已经放好了,最后停在了 \(i\) 位置,那么转移即为枚举当前还没有到的位置 \(j\) ,然后我们可以计算出来从 \(i\)\(j\) 的距离,然后速度的话,其实就是人和机器人之间的相对速度,那么就可以计算时间了,然后吧,这个激活点就直接二分,二分出来人到达目标点之后第一个转到那里的激活点,然后做完了。

posted @ 2025-10-08 14:34  wjx_2010  阅读(14)  评论(1)    收藏  举报