赛时安排
7:50~8:00 看题目
8:00~8:20 推了推T1数学题的特殊样例的性质,当
a
=
2
,
b
=
3
a=2,b=3
a=2,b=3时,打表能发现,凑成1需要
3
−
2
3-2
3−2两步,然后2和3各需要一步,接着4,5,6需要两步,7,8,9需要三步,可以推出,每三个数字为一组,然后答案就是
(
n
%
3
)
?
n
/
3
+
1
:
n
/
3
(n\%3)?n/3+1:n/3
(n%3)?n/3+1:n/3考试时候忘了判断是否整除三的情况了…丢了10分。然后还有
a
=
1
a=1
a=1的情况,先用b来凑n,然后对于剩下的部分判断全部用1凑,还是先用1凑成b再减一个b代价少。
8:20~8:55 然后看了看T2,发现第一档的70分是个
O
(
n
3
)
O(n^3)
O(n3)的DP,然后写了一下。测完之后爆零了,发现…它的答案比我设置的初值都大…然后好像还因为数组是数据上限,每次memset之后还T掉了…然后70分没了
9:00~9:50 看了看T3,第一档十分想了个
O
(
n
2
l
o
g
)
O(n^2log)
O(n2log)的方法,每一次求倍增求LCA,然后算答案。
9:50~10:30 接着想了想T2的正解,然后按DP的方法来想。想着再多开一维判断这一个地方是否被选过,但是这样来写DP的话最后答案并不是想的那样来输出…然后就卡住了。
10:30~12:00 T4,看了眼…发现还不如去磕一下T1…然后死磕T1…
12:00~12:10 交卷
赛后总结
T1
根据题目中的条件,很显然能够得到一个式子 a x + b y = c ax+by=c ax+by=c,已知 a , b , c a,b,c a,b,c,来求得 ∣ x ∣ + ∣ y ∣ |x|+|y| ∣x∣+∣y∣的最小值。我们可以看出这就是拓展欧几里得。因此,我们可以通过拓展欧几里得先求出一个特解,然后再根据通式来求得最优解。
T2
这道题的正解是DP然后再加上分治,然鹅,据说这道题是把之前的一道背包改了一下删掉了个条件,为了让这道题要加上分治的优化,用贪心就能过掉了…只需要按攻击和抵挡之间的代价差从大到小的顺序排序,然后前面的都用来攻击就过了。
T3
这道题的题解思路是用一个单调栈来维护,但是用dsu on tree的话也可以过去。做法就是把每个点按他在区间的位置再排序然后dfs,接着按dsu的方法来做,每一个节点存他这个位置能够以它为LCA的区间的个数,然后重儿子直接继承答案,轻儿子就与前面的区间合并,用并查集来维护,最后把每个节点上的答案累加一下就好了。
T4
To be continued…