时间安排
7
:
50
−
8
:
20
7:50-8:20
7:50−8:20 把四道题看了一遍,T1好像以前做过,T2应该和kmp有关,T3感觉就是个贪心,T4就是求最长的额链。
8
:
20
−
9
:
00
8:20-9:00
8:20−9:00 对于T1的集合之间的并和交很容易想到位运算中的或和与,所以我就写了个bitset,但是1000的样例怎么都过不去,后来看见绝对值才意识到可能为负数,然后就整体右移到非负的区间即可。
9
:
00
−
9
:
50
9:00-9:50
9:00−9:50 对于T2,显然如果
n
=
1
n=1
n=1,那么答案就是
n
e
x
t
[
m
]
next[m]
next[m],考虑
n
>
1
n>1
n>1 的情况,显然最小的是
m
(
n
−
1
)
m(n-1)
m(n−1),然后考虑如何在两个相同的字符串的前面和后面分别加上一个字符串后还能相等,显然是循环,就是找最大的循环,假设长度为
v
a
l
val
val,那么答案就是
m
(
n
−
1
)
+
v
a
l
m(n-1)+val
m(n−1)+val。
9
:
50
−
10
:
30
9:50-10:30
9:50−10:30 考虑一个显而易见的贪心:一定是把所有
a
i
a_i
ai 排好序后从大到小依次加入到恰好为最大的那个
a
i
a_i
ai,这样一定的最优的,所以我就写了一个优先队列,每次取出堆顶,然后pop就行了。
10
:
30
−
11
:
20
10:30-11:20
10:30−11:20 对于T4,当
u
=
v
u=v
u=v 即不加边时答案显然是(设树的直径为
v
a
l
val
val )
⌈
v
a
l
+
1
2
⌉
\lceil\frac{val+1}{2}\rceil
⌈2val+1⌉,当有环时可以把环看成是根,那么答案就是最大的深度,具体的代码和基环树类似,就是是把环上的点都标记一下然后dfs,时间复杂度
O
(
n
2
)
O(n^2)
O(n2)。
11
:
20
−
11
:
50
11:20-11:50
11:20−11:50 去磕T1的部分分了,但是我是真的不会维护并和交,我想了好多数据结构但都不知道怎么去实现。
11
:
50
−
12
:
10
11:50-12:10
11:50−12:10 提交。