2019/11/5 爆零总结
T1
大概就是一个打牌的过程,你有
n
n
n种兵符,对手有
m
1
m1
m1种御符和
m
2
m2
m2种兵符,给出每种符的能力值和数量,你为进攻方,你的兵符只对能量值相同或更小的有作用,打御符时不得分,打兵符时得分为能力值之差,御符全部清除后可以直接走脸,得分为你的兵符的能力值,最大化你的得分
其实这就是一个贪心,考虑先打兵还是先破防,不过细节贼多,而且还有负数,巨坑……
T2
题面描述太长了,大概就是给你一张图对边进行黑白染色,求使得一个边集合包括两种颜色的边,且图联通,求使得最小的集合的边权和
=
X
=X
=X的方案数
考场上没有看出题意,没想到跟
m
s
t
mst
mst有关(主要是题读错了),其实存在一个结论——对于一张图的最小集合,其仅与
m
s
t
mst
mst有一条边的差别
然后就考虑计算答案:
设
m
s
t
mst
mst的权值和为
s
u
m
sum
sum
分3种情况
1.
s
u
m
>
X
sum>X
sum>X 答案为
0
0
0
2.
s
u
m
=
X
sum=X
sum=X 倍增求出路径上边权最大值,求出与
m
s
t
mst
mst替换后
s
u
m
sum
sum不变的边数
c
n
t
1
cnt1
cnt1,对于这些边,我们需要使其至少有一条边与
m
s
t
mst
mst边颜色不同,于是可以算不合法的情况
a
n
s
=
2
m
−
2
m
−
(
n
−
1
)
−
c
n
t
1
∗
2
ans=2^m-2^{m-(n-1)-cnt1}*2
ans=2m−2m−(n−1)−cnt1∗2
3.
s
u
m
<
X
sum<X
sum<X 倍增同上,求出与
m
s
t
mst
mst替换后
s
u
m
=
X
sum=X
sum=X的边数
c
n
t
1
cnt1
cnt1和
s
u
m
>
X
sum>X
sum>X的边数
c
n
t
2
cnt2
cnt2,
m
s
t
mst
mst的边颜色显然相同,所以那
c
n
t
1
cnt1
cnt1条边至少有一条与
m
s
t
mst
mst颜色不同,剩下的那
c
n
t
2
cnt2
cnt2条边是可以随便选颜色的
a
n
s
=
2
∗
(
2
c
n
t
1
−
1
)
∗
2
c
n
t
2
ans=2*(2^{cnt1}-1)*2^{cnt2}
ans=2∗(2cnt1−1)∗2cnt2
T3
太复杂了Orz
给定一个模式串,和一个某些位置未知(可为
0
−
9
0-9
0−9,以
?
?
?形式读入)的串,求模式串在该串中至少出现一次的第k小串
考场上肝这道题太久,浪费了很多时间,其实可以再去看看T2,做法很好想但是不是很好写,我直接扔题解了
设
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示前
i
−
1
i − 1
i−1位已经确定,并且匹配了
m
m
m的一个长度为j的前缀
时,第
i
i
i位到第
n
n
n位有多少种合法的填数方案.
询问时可以通过
d
p
dp
dp数组依次确定
S
S
S每一位的值,复杂度
O
(
n
)
O(n)
O(n),需要一些优化.
如果状态
v
v
v由状态
u
u
u转移而来,我们称
u
u
u为
v
v
v的后继.
类似树的重链剖分,对于每个状态,我们取其所有后继中
d
p
dp
dp值最大的一个作为重
后继(有多个取字典序最小的),倍增求出每个状态沿着重后继走
2
k
2^k
2k步之后到达的状态,以及这两个状态之间的相对排名.
复杂度
O
(
n
m
l
o
g
n
+
q
l
o
g
k
l
o
g
n
)
.
O(nmlogn + qlogklogn).
O(nmlogn+qlogklogn).