这次初赛是我竞赛生涯里参赛感觉最好的一次,从昨天下午做完作业来到机房起,整个人处于一个松弛的状态,实在是不怎么紧张,回想起一年前那个战战兢兢的自己,心感到我一年来的进步是如此之大,不但在竞赛水平,更在心理状态。
考试的时候很淡定,阅读第三题我做了一个多小时,因为我觉得这不但是一个很有难度,要求很高的编程题,更是一道数学趣味题,虽然我最终没有完全理解,但是这个过程我很享受。
完善程序做了不到半小时,相比于去年取石子那道奇葩状压使我15分全扣光,今年的水平很稳定,直接秒杀。
去年的我只考了73.5,接下来的两周时间心态爆炸,整个人浑浑噩噩,虽然后面又滚进了复赛,但这也很说明问题。今天我虽然只考了88,但是体验比去年好很多。
简要评论一下题目
唯一一道硬件题目,看起来B最正经
出题者真是一个天才,我本来还以为这又是一道原题,结果这个栈底真的是点睛之笔
阅读第一题是在做两个数or起来的最大值
我竟然没有意识到n可以等于0,然后我错了,可惜至极
这题有数学思想,反证法。若输出为偶数,假设只有一个偶数,那么任意两个数or起来,最后一位肯定是1,那么答案就是奇数了,矛盾,所以C是正确的
阅读第二题,狂喜。前一天晚上我刚发了个求kth的博客,今天押到题了。
但是今年初赛又加了一个跟去年一样坑的出题方法,去年是把并查集的路径压缩删掉,今年把快排部分搞得乱七八糟,可以发现代码里面在交换的时候处理得很不好,所以最劣复杂度可以到
O
(
n
2
)
O(n^2)
O(n2),我错了。
同样的,这道题目用这个代码也是
O
(
n
2
)
O(n^2)
O(n2),我又错了。
第三题是数学小游戏。
一个字符串,选择一个点
p
p
p为轴点,可以令区间
[
1
,
k
]
[1,k]
[1,k]整体往右移动一格,
[
k
,
n
]
[k,n]
[k,n]整体往左移动一格,问最少步数是初始字符串变成目标字符串。
我还看出了他是在双向bfs
其实我觉得是对的,但答案是错的
我模拟了01234到43210的情况,答案是8
所以前后两项的差分别是4,6,6,8,8,10……
通过合情推理得到答案是68
更合理一点的解法应该是,如果n趋于无穷大,可以存在一种
n
2
n^2
n2的解法,即每次可以用
n
n
n步把两个相对位置跟目标不同的数交换相对位置
所以方案数应该是关于
n
n
n的二次多项式,用待定系数法,发现
f
x
=
x
2
2
−
4
f_x=\frac{x^2}{2}-4
fx=2x2−4,那么题目里面
x
=
12
,
f
x
=
68
x=12,f_x=68
x=12,fx=68
这题我四个选项分别构造了几种情况,只有A是无解的,但是我又错了,可能是我计算错误。
其实可以把目标字符串的顺序映射到初始字符串,
C
C
C的情况下,对于轴点
k
k
k,假设右边一共有
x
x
x个数,可以知道
x
x
x是偶数,再假设右边有
y
y
y个数应该在
k
k
k左边,等价于逆序对数是
x
x
x,每做一次右边的变换,
k
k
k到了最右边,逆序对数的
d
e
l
t
a
=
y
−
x
−
x
=
y
−
2
x
delta=y-x-x=y-2x
delta=y−x−x=y−2x是偶数,那么如果原始逆序对数是奇数,要使逆序对数变为0,就无解了。
完形第一题很简单,但是有一些细节
本体其实是
c
u
r
W
+
(
B
−
c
u
r
V
)
∗
w
i
v
i
curW+\frac{(B-curV)*w_i}{v_i}
curW+vi(B−curV)∗wi
不要被上面的蒙蔽,这里不用除东西,选择B
完形第二题跟去年一样的状压,所以我有经验了,很好想
x
−
l
o
w
b
i
t
(
x
)
x-lowbit(x)
x−lowbit(x)手摸一下,D
我认为四个选项其实都合理,但是硬要说的话,只有C是有意义的
今年题目比去年有水平,也比去年简单一点
后续可能会再探寻一下阅读第三题,我觉得出的很好
Update:
真实分数也是88,再次复盘了一下考试时的策略
这次因为非同寻常的自信就没有管一些细节,认为阅读题第三题很有意义就一直在思考,再加上阅读题第二题我还算是押到了题,结果确实是因小失大了
同机房也有一个98.5的,在zj都能排前十,很羡慕,因为我也是奔着100去的
羡慕的同时,也回想,这次最主要的目的是突破自己初赛考不好的梦魇,难免有点矫枉过正的味道,希望复赛能细心一点