时间安排
8
:
00
−
8
:
20
8:00-8:20
8:00−8:20 把四道题都看了一遍,T1感觉很熟悉,T2没什么思路,T3最开始以为是区间dp,T4也没什么思路。
8
:
20
−
8
:
50
8:20-8:50
8:20−8:50 我想了想,以前确实做过一道类似的(我没想到csp7连),在校OJ里编号2957的随机数,都是二叉树求期望,只不过一个是求叶子节点的平均深度,一个是求叶子节点的个数,我先打了两个表:对于每个
i
i
i 的不同形态的二叉树的个数(
f
[
i
]
f[i]
f[i])和叶子节点的总数(
g
[
i
]
g[i]
g[i])发现
g
[
i
]
=
i
f
[
i
−
1
]
g[i]=if[i-1]
g[i]=if[i−1],而且不难看出
f
f
f 数列是卡特兰数列,所以
a
n
s
=
g
[
n
]
f
[
n
]
=
n
f
[
n
−
1
]
f
[
n
]
,
又
∵
f
[
n
]
=
C
2
n
n
n
+
1
,
a
n
s
=
n
(
n
+
1
)
2
(
2
n
−
1
)
ans=\frac{g[n]}{f[n]}=\frac{nf[n-1]}{f[n]},又 \because f[n]=\frac{C_{2n}^n}{n+1},ans=\frac{n(n+1)}{2(2n-1)}
ans=f[n]g[n]=f[n]nf[n−1],又∵f[n]=n+1C2nn,ans=2(2n−1)n(n+1)
我原以为double的精度很大,可以直接处理,但还是炸了。我明明记得double比long long精度都高。
8
:
50
−
9
:
30
8:50-9:30
8:50−9:30 对于T2,我先把次短路的板子码了,对于
k
>
0
k>0
k>0 的情况,我的想法是再开一个
v
v
v 数组记录当前的
d
i
s
dis
dis 数组经过了多少个新边(即公交车),当
v
[
i
]
>
k
v[i]>k
v[i]>k 时停止转移,最后输出即可,但这个想法是错的,因为你的合法的状态也可能从不合法的状态转移过来。
9
:
30
−
10
:
10
9:30-10:10
9:30−10:10 T3我想的时间很久,我最开始的想法是先做一遍区间dp,然后枚举所有区间找到最大值所在的区间,然后对于剩下的区间递归接着区间dp,但复杂度爆炸,初值也不好设,就先写了一个
o
p
=
1
op=1
op=1 的特殊情况就去看T4了。
10
:
10
−
11
:
00
10:10-11:00
10:10−11:00 对于T4,考虑最开始的边都是由大权值的点连向小权值的点,所以对于一个三元组
(
x
,
y
,
z
)
(x,y,z)
(x,y,z) (假设
x
<
y
<
z
x<y<z
x<y<z),这个三元组可以产生贡献当且仅当
x
x
x 和
z
z
z 之间的边被翻转且
x
x
x 到
y
y
y 和
y
y
y 到
z
z
z 之间的边都没被翻转或
x
x
x 到
y
y
y 和
y
y
y 到
z
z
z 的边被翻转且
x
x
x 到
z
z
z 的边未被翻转,所以就可以开一个bool数组,每次操作时异或1,最后
n
3
n^3
n3 枚举三元组判断就行。
11
:
00
−
11
:
50
11:00-11:50
11:00−11:50 又去把前几道题的代码大致看了一遍,我发现T2的想法是错的,就在推T2,我大致想到了分层图,因为
k
k
k 很小,就开始考虑如何去建图跑次短路,但是分层图没写过多少道题,细节没处理好,就放弃了。
11
:
50
−
12
:
20
11:50-12:20
11:50−12:20 又去看了看T3和T4,但也没看出什么。
12
:
00
−
12
:
40
12:00-12:40
12:00−12:40 检查文件名,提交。