0828csp七连day1比赛总结

1.时间安排

6:00-6:20

看完T1,意识到是个模拟水题,光速码完,并与手推数据对照,确认没问题看T2。

6:20-6:40

看到了T2的70%数据很简单,光速码完暴力,然后思考很久AC做法没思路,去看T3。

6:40-7:00

看到数据需要离散化,第一遍的思路是暴力+离散化,光速码完,然后祈祷数据水,去看T4。

7:00-7:30

看了10分钟没思路,就去检查前面的代码有没有低级错误,手捏的一些数据测试,确定暴力分没问题,继续看T4。

7:30-9:00

发现暴力似乎不可解,试图打表,也很困难,就进行手推(n=5一共42种子图qwq),虽然推了快半个小时但成功得出了两个结论中的一个,然而没有发现分母的关系,无缘AC。

9:00-9:30

回过头看T3,发现有60%的数据可以用树状数组解,光速码完,测试没问题,回头想T2。

9:30-10:00

始终没想到T2正解,T4也没有进展,无奈提交。

2.赛后反思

1.策略的问题

前三题的时间还算合理,但在T4上花的时间太久了,差不多两个小时,但终究还是爆0。
更合适的,应该把更多的时间留在T2这样正解并不是很难就能想到的题,或者是进行对拍检查。
目前的策略:先把最简单的题码完,难一点的先码送分数据,更难的送分数据也没有思路就先不做,把前面能拿的分拿到更多,回过头再考虑这些难题。

2.观察力的问题

T2实际上就是二分查找和树状数组区间求和单点查询,但赛场上都没有看出来,反而是T3只用一个前缀和数组就能拿的60分却用了更麻烦的树状数组。T4的分母推出前5个后,没有发现是卡特兰序列。

没有看出二分的单调特性还是粗心了,但数论这类题确实做的比较少,没有看到题就能直接意识的考察的是什么的思维,码代码也没有手感,还需要参考标程。这种数论,尤其是推算规律的题还是需要多练。

3.算法的问题

T3涉及到了从未学过的算法:分块(莫队)。这是一种类似于树状数组和线段树的数据结构。

既然是刚学的算法,最近就要加强练习,分块的思想不难代码也比较容易实现,所以要尽量练会这类型题。

4.心态的问题

在做到T4时,因为做到了不会的题,心态有点乱,好在调整的比较好,没有太大影响。但这并不能说明这种见到难题就心乱的心态没有影响(@某冰雪小屋),这并不是个比赛的好习惯。

见到难题,第一时间不应该想别人拿高分,我做不出来,这样只会影响自己发挥。应该想的是自己用什么办法,能让自己拿高分。线上赛场没有现实赛场那种压迫感,这种心态不及时改,将来在赛场上肯定吃亏。

不需要去想别人发挥如何,就把比赛当做平常的练习,没必要想没做出来会怎么样,而是去想怎么样用学过的东西拿高分。赛场是残酷的,所以不得不让自己为思考中心,专注自己的发挥,忽视对手,才能保证正常的发挥,不报遗憾。

3.题解

T1.数列

题意:
输出外观数列 1 ≤ n ≤ 25 1\leq n\leq 25 1n25)。

n=1 1
n=2 11 (1个1)
n=3 21 (2个1)
n=4 1211 (1个2,1个1)
……

题解:

这是一道纯模拟题,各种方法都可以,甚至可以手推数列打表(建议数据加强)。

赛场上用了递归,用字符串储存答案,按照规则扫描上一个字符串得到这一个的答案。要注意的是扫描到字符串结尾要进行特判。

T2.索引

题意:

定义索引:若存在 i i i使得 a [ i ] = = i a[i]==i a[i]==i,则称 i i i为序列 a a a的一个索引。

给定一个 n n n项单调递增的序列,先判断是否存在索引,再在保证序列仍然单调递增的情况下进行 k − 1 k-1 k1次区间修改,询问此时是否存在索引。

范围:

n ≤ 1 e 7 , k ≤ 1 e 3 n\leq 1e7,k\leq 1e3 n1e7,k1e3

其中70%的数据满足 n ∗ k ≤ 1 e 8 n * k\leq 1e8 nk1e8

题解:

对于70%的数据可以用暴力更新扫描的方式,但这样显然不能AC。

正解:树状数组+二分查找

注意到本题的特殊条件修改完的序列仍然单调递增,因此满足了二分的前提条件:单调性。用二分可以使查找的复杂度降为O( log ⁡ n \log n logn)。

考虑修改,可以用树状数组优化,进行区间修改,单点查询的操作,复杂度同样降为O( log ⁡ n \log n logn)。就可以AC了。

可以发现,大多数的二分都具有一个重要的特点:单调性。所以,如果必须进行遍历的查找,如果序列具有严格的单调性,可以优先考虑二分来降低复杂度。

T3.奇数

题意:

给定一个n项的数组,进行q次查询:给定区间[l,r],询问该区间有几个出现奇数次的数

范围:

30%的数据满足: 1 ≤ N ≤ 1 e 3 , 1 ≤ Q ≤ 1 e 3 , 1 ≤ a i ≤ 10 1\leq N\leq 1e3,1\leq Q\leq 1e3,1\leq ai\leq 10 1N1e3,1Q1e3,1ai10
30%的数据满足: 1 ≤ N ≤ 1 e 5 , 1 ≤ Q ≤ 1 e 5 , 1 ≤ a i ≤ 10 1\leq N\leq 1e5,1\leq Q\leq 1e5,1\leq ai\leq 10 1N1e5,1Q1e5,1ai10
20%的数据满足: 1 ≤ N ≤ 1 e 5 , 1 ≤ Q ≤ 1 e 5 , 1 ≤ a i ≤ 1 e 5 1\leq N\leq 1e5,1\leq Q\leq 1e5,1\leq ai\leq 1e5 1N1e5,1Q1e5,1ai1e5
20%的数据满足: 1 ≤ N ≤ 1 e 5 , 1 ≤ Q ≤ 1 e 5 , − 1 e 9 ≤ a i ≤ 1 e 9 1\leq N\leq 1e5,1\leq Q\leq 1e5,−1e9\leq ai\leq1e9 1N1e5,1Q1e5,1e9ai1e9

题解:

对于第一档的数据,直接暴力查找。对于前两档数据,可以采用前缀和。因为数组大小有限,这些方法不可能AC。

正解:分块,莫队

考虑到没有修改的操作,可以把所有的询问先储存起来,排序,再离线求解。

每次询问,只需要暴力移动当前已选中区间的左右端点,这样复杂度最坏只有O( n n n\sqrt n nn )

T4.解谜

题意:

给定n个点( n ≤ 1 0 9 n\leq10^9 n109),这n个点能构成的所有二叉树种类数 f [ n ] f[n] f[n],所有可能的二叉树的子节点的个数和 g [ n ] g[n] g[n]

g [ n ] f [ n ] m o d 2148473647 \frac{g[n]}{f[n]}mod 2148473647 f[n]g[n]mod2148473647的值

题解:

实际上, g [ n ] = f [ n − 1 ] ∗ n g[n]=f[n-1]*n g[n]=f[n1]n,这是因为,对于上一个状态的所有二叉树,在不出现重复的情况下,在某个叶节点上新增一个叶节点,那么这时的二叉树叶节点数量不变,并且一共有n种添加方式,合起来就是上式(在赛场上想出来的,和题解不太一样,但显然是正确的)。

然后通过打表发现, f [ n ] f[n] f[n]正是卡特兰序列的第 n n n项。

经过化简,答案就是 n ( n + 1 ) 2 ( 2 n − 1 ) \frac{n(n+1)}{2(2n-1)} 2(2n1)n(n+1),再用快速幂进行分数取模运算就AC了。

所有考点

T1:模拟
T2:二分+树状数组
T3:分块,莫队
T4:递推,卡特兰数,分数取模

4.未来规划

1.巩固数论的知识。
毕竟当时一股脑学了一大堆东西却没怎么练,已经忘了差不多了(数论只会gcd)。而且一些常识性的数论知识要熟记,比如质数,欧拉函数,卡特兰数,赛场上肯定不让翻算阶。

2.刷分块的题目。
刚刚学的新知识,不抓紧巩固,就要溜走了qwq。

3.找一些二分的题目分析。
二分题目的特征很多,但有时候会隐藏在一些不起眼的地方被忽视,并且经常和其他的知识点结合起来考察。在一些暴力算法中,二分也可以达到少量的优化来拿到更多的分数。可以尝试总结一下这类题的特征和分析方法。

4.与同学交流,丰富解题策略
像lyc,bcy大佬经常拿到神犇级别的分数,除了码力,他们肯定也有更优的比赛策略。虽然培养码力很重要,但我觉得更好的策略比码力更重要。策略不对,码力再好也发挥不出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值