时间安排
8
:
30
−
8
:
50
8:30-8:50
8:30−8:50 把四道题都看了一遍,三道数学一道大模拟,说实话看完题我整个人都是懵的,因为一道图论和数据结构的题都没有,这CCF出的什么破题,我从昨天晚上开始一直在看图论的题,早上还背了背tarjan的板子,考前还码了将近百行的线段树和tarjan的模板,结果一个都没用到。
8
:
50
−
9
:
10
8:50-9:10
8:50−9:10 T1是个大水题,就按照题目的描述直接模拟即可,类似于埃氏筛,然后在开一个
n
e
x
ne_x
nex 数组表示
x
x
x 的下一个符合条件的数是什么,然后就可以
O
(
1
)
O(1)
O(1) 回答询问了,整体复杂度应该是
O
(
N
l
o
g
l
o
g
N
+
q
)
O(NloglogN+q)
O(NloglogN+q)。
9
:
10
−
9
:
50
9:10-9:50
9:10−9:50 在搞T2,首先样例的解释给了我一个思路:就是先求出可能的
S
S
S,然后再根据
S
S
S 的值来考虑构造
a
i
a_i
ai 序列,然后在用组合来统计贡献,然后就在考虑构造
S
S
S,然后就推了半天,但是没推出来,就先码了个暴力就去看T3了。
9
:
50
−
10
:
40
9:50-10:40
9:50−10:40 对于T3,首先不难发现一个数连续被更改2次和原来的数是一样的,所以一定不会连续更改一样的数,然后可以发现不管你怎么变化这个序列,这个序列最后一定还是一个单调不减的序列,所以我的想法是将序列分为前后两段,让前一段尽量变大,后一段尽量变小,然后这样就能使整个序列尽量接近那个中间值,这样方差就能变小。
10
:
40
−
12
:
20
10:40-12:20
10:40−12:20 T4就是一个大模拟的题,首先考虑路径是1的情况,因为路径为1只能走一次,所以只需要枚举和这个点相连的4个点,如果有为1的路径而且之前没有棋子或者可以吃点那么就加一格;然后是路径是2的情况,考虑如果为2的话需要一直走到底,所以可以先
O
(
n
m
)
O(nm)
O(nm) 预处理出上下左右只走2路径可以到达的点,然后再用一个set存已经放过的点,每次lower_bound和这个点比大小,如果小就再比较能否吃点即可;最后是路径是3的情况,这种情况我其实没有什么好的想法,我最初的想法是把3的路径能到达的点单独哪出来组成一个个连通块,然后在其中考虑割点上是否有点之前被占,再考虑吃点的问题。但是实际实现是真的不好实现,怎么都调不对,就换成了bfs然后又调了一会就将近两个小时了。
12
:
20
−
12
:
40
12:20-12:40
12:20−12:40 最后又去看了看T2和T4,又推了推性质。
12
:
40
−
13
:
00
12:40-13:00
12:40−13:00 检查文件名,提交。