前言
有一点时间可以写的详细一点了。。。
原题是CF
A-Regular Bracket Sequence
题目大意
给你四个字符串 ( ( (( ((、 ( ) () ()、 ) ( )( )(、 ) ) )) )),问能否组成合法的括号序列。
题解
分别按照上面的顺序记为
a
,
b
,
c
,
d
a,b,c,d
a,b,c,d。
首先可以排除
b
b
b号的所有情况,因为有没有
b
b
b都是无所谓的。
很明显如果
a
a
a和
d
d
d的数量不一样,那么一定不能组成合法的序列。
但是如果
c
c
c存在,那么一定要有
a
a
a和
d
d
d来和其匹配,不然就一定不合法。
code
B-Discounts
题目大意
给你 n n n个数,去掉第 q i q_i qi大的数后求和。
题解
直接排序模拟即可。
code
C-Painting the Fence
题目大意
给你 n n n段区间,问去掉 2 2 2个区间后,能被覆盖到的点的总数最多是多少。
题解
我竟然想了很久。不可思议。
一开始我想了一个非常暴力的
n
2
l
o
g
2
n
n^2log^2n
n2log2n的做法,但是算了一下,差不多要
3
e
10
3e10
3e10的复杂度,虽然
C
F
CF
CF的评测姬非常快,但是两秒内应该跑不出来。
这个暴力做法就是暴力建立线段树修改,然后维护
>
0
>0
>0的个数。
但是很明显可以有牛逼的做法,虽然依旧是暴力。
首先差分
O
(
n
)
O(n)
O(n)求出每一个点在不修改的时候能被覆盖多少次。
分析一下,必然是被覆盖
1
1
1次或者是
2
2
2次的可能会对答案产生贡献。
参照差分的思路:先暴力枚举删除某一段区间。
那么如果再删除一个区间,假设为
[
l
,
r
]
[l,r]
[l,r]。
那么在这个区间内所有的
1
1
1,都会使答案
−
1
-1
−1。
也就是我们需要统计
[
l
,
r
]
[l,r]
[l,r]之间有多少个
1
1
1。
暴力维护是
O
(
n
3
)
O(n^3)
O(n3)。
加一个前缀和维护是
O
(
n
2
)
O(n^2)
O(n2)的复杂度。
code
好像忘记删除调试语句了,算了不管了。
code
D-Stressful Training
题目大意
n
n
n台电脑,每一台电脑有一个
a
i
a_i
ai的初始电量,和
b
i
b_i
bi的每分钟消耗电量。
现在你有一个充电器,问充电器需要每分钟最少充多少电才能让所有电脑同时工作到
k
k
k分钟。
充电器每分钟充的电定值
题解
先考虑子问题。
对于每一分钟,都一定是给那个续航能力最少的电脑充电。
我们把消耗电量再充电,变成充电在计算续航时间。
对于每一台电脑
a
,
b
a,b
a,b,他的续航时间一定是
⌊
a
b
⌋
\lfloor\frac ab\rfloor
⌊ba⌋,下一秒他就要挂掉了。
那么我们就每一次取出当前续航时间最少的,并给他充电。
这样不会有后效性。
那么前面一部分的答案就二分一下就可以了。
code
E-Knapsack
题目大意
有一个容量为
w
w
w的背包,大小为
i
i
i的物品数量有
c
n
t
i
cnt_i
cnti个,求最大能装的重量。
n<9
题解
本场考试最水题目没有之一。
n
n
n这么小,坑定就是搜索或者是状压。
为什么要状压?不需要,到头来和搜索还是一样的。
如果
n
n
n大一点就是对于空间第二维有限制的背包问题,这样的问题需要三分法求解或者是高级贪心。这里不展开。
但是
n
≤
8
n\leq 8
n≤8,这么明显的搜索为什么不写???
那么就枚举每一个物品放几个就是可以了,搜索不需要教了吧QwQ
code
F-Clear the String
题目大意
给你一个串
s
s
s,每次可以花费
1
1
1的代价删去一个子串,要求子串的每一位为同一个字符。
求删去整个串的最小代价。
题解
请见洛谷题解区,被踩在最下面的那一个是我写的。