2021.01.15【NOIP提高B组】模拟 总结
作者:互联网
2021.01.15【NOIP提高B组】模拟 总结
第一题 开车旅行
考场上打了70分。
预处理出每个点下一步,然后暴力跳。
正解设
f
i
,
j
f_{i,j}
fi,j表示点
i
i
i跳
j
j
j步(一步为小A和小B总和)的位置,
g
i
,
j
,
0
/
1
g_{i,j,0/1}
gi,j,0/1表示途中小A/小B的价值总和。
然后倍增跳一下即可,关键如何预处理
j
=
0
j=0
j=0的情况。
从大到小排序高度,然后按原来顺序跑,每次做完之后把这个点从链表中删除,因为可以发现,最大值和次大值一定会在这个点前两个点到这个点后两个点之间,链表维护。
时间复杂度为
O
(
n
l
o
g
2
n
)
O\left(n\ {log}_2^n\right)
O(n log2n)。
第二题 同余方程
将原题转化为
a
x
−
b
y
=
1
ax-by=1
ax−by=1,其中
a
,
b
a,b
a,b已知,很显然这是一道扩展欧几里得算法例题。
推倒过程(
(
a
,
b
)
\left(a,b\right)
(a,b)表示
a
,
b
a,b
a,b的最大公约数):
如果求出来的
x
x
x小于
0
0
0,则加上一个
b
b
b。
愉快的过了。
第三题 借教室
考虑线段树维护最小值,然后卡一下常,就过了。
其实也可以用二分+差分来做,更快一点
第四题 疫情控制
二分一下答案。
考虑贪心往上跳。
就跳到第二层,然后把还可以继续跳的距离按小到大排序。
接着把没覆盖的点与这些点匹配一下。
时间复杂度
(
m
+
n
)
l
o
g
2
n
\left(m+n\right){log}_2^n
(m+n)log2n。
标签:right,15,NOIP,log2n,然后,链表,2021.01,left 来源: https://blog.csdn.net/linweitong2020/article/details/112710833