20210902上午
数组开挂了,寄!
T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | |
---|---|---|---|---|---|---|---|---|---|
预测 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
一测 | 100 | 100 | 100 | 100 | 100 | 0 | 100 | 100 | 100 |
T1:
dp经典,每个点可能来自左上或上方,
f
i
,
j
=
m
a
x
(
f
i
−
1
,
j
−
1
,
f
i
−
1
,
j
)
{f}_{i,j}=max({f}_{i-1,j-1},{f}_{i-1,j})
fi,j=max(fi−1,j−1,fi−1,j),转移即可。
T2:
最短路板子。
T3:
注意到先序遍历子树都在节点后连续区间与后续遍历子树都在节点前连续区间,通过节点在后续遍历的位置在先序遍历中找到左右儿子位置,再对其子树区间递归处理。
T4:
数学题,分析可知应该是车载人到一定距离掉头接另外一个走的人,最后一起到终点。如图所示
已知车速为
v
1
v_1
v1,步行速度为
v
2
v_2
v2,总路程为
S
S
S
设车中间段来回的长度为
s
s
s,则车总路程为
S
+
2
s
S+2s
S+2s,可得总时间
T
=
(
S
+
2
s
)
v
1
T=\frac{(S+2s)}{v_1}
T=v1(S+2s),而汽车逆行的时间即为两人都在走的时间,即
t
=
s
v
1
t=\frac{s}{v_1}
t=v1s,故人步行的总时间为
T
+
t
T+t
T+t,而紫色长度可由人与车速度比得为
s
′
=
s
∗
v
2
v
1
s'=s*\frac{v_2}{v_1}
s′=s∗v1v2,所以由人的路程列出方程为
(
T
+
t
)
∗
v
2
=
S
−
s
′
(T+t)*v_2=S-s'
(T+t)∗v2=S−s′,解得
s
=
v
1
−
v
2
v
1
+
3
v
2
∗
S
s=\frac{v_1-v_2}{v_1+3v_2}*S
s=v1+3v2v1−v2∗S,所以时间
T
=
3
v
1
+
v
2
(
v
1
+
3
v
2
)
v
1
∗
S
T=\frac{3v_1+v_2}{(v_1+3v_2)v_1}*S
T=(v1+3v2)v13v1+v2∗S
T5:
模拟。设置结构体,重载运算符<,排序输出即可。比较方式即把较短字符串重复到跟较长字符串相同长度后按字典序排序,如727与7277276的比较
727 727 6
727 727 7
所以727>7277276
T6:
贪心。按左端点从小到大排序,左端点相同则按右端点从小到大排序。每次取右端点一定是最优的,当右端点无法覆盖之后取新的端点。
T7:
搜索。优先直走,转弯次数超过答案剪枝。
T8:
dp。
f
i
f_i
fi表示到i最少需要多少单词,每次枚举最后一段暴力匹配,能匹配则更新,复杂度O(n4),本题n很小,不需要AC自动机。
总结:比昨天难一点,基本还是普及组难度。