bzoj4475: [Jsoi2015]子集选取
分开考虑每一个数在哪些位置选了
如果用纵列来考虑,即一列一列考虑放了多少个的话
我们发现,第一列选择了
i
i
i个位置时,第二列只能选择不超过
i
−
1
i-1
i−1个,以此类推
那么其实相当于要选出若干不相等的数
所以一个数的贡献就是
2
k
2^k
2k,
n
n
n个数的总贡献就是
2
n
k
2^{nk}
2nk
**bzoj4476: [Jsoi2015]送礼物
首先分数规划,然后一个
l
o
g
2
log^2
log2的算法就显然出来了…由于我常数太大所以跑不动
我们观察题目的限制,在大小在
[
L
+
1
,
R
]
[L+1,R]
[L+1,R]的串,显然左右端点分别是最大最小值时是最优的,否则一定可以去掉某一个位置使串长减小而贡献增大
当然对于长度为
L
L
L的串不一定以最大最小值为端点,所以这个暴力rmq做一次
不妨设右端点为
m
x
mx
mx,左端点为
m
n
mn
mn,然后反过来做一次
式子推一下就是
(
a
[
r
i
g
h
t
]
−
a
n
s
∗
r
i
g
h
t
)
−
(
a
[
l
e
f
t
]
−
a
n
s
∗
l
e
f
t
)
>
=
a
n
s
∗
K
(a[right]-ans*right)-(a[left]-ans*left)>=ans*K
(a[right]−ans∗right)−(a[left]−ans∗left)>=ans∗K
枚举右端点,用一个单调队列维护
a
[
i
]
−
a
n
s
∗
i
a[i]-ans*i
a[i]−ans∗i的最小值
注意这里有一个地方卡住了我…就是如果这样选择的话,右端点可能不一定能取到最大值的位置,左端点也不一定能取到最小值的位置。那与我们的规定违背啊…但是注意到,我们串长在
[
L
+
1
,
R
]
[L+1,R]
[L+1,R]时,一定是左右端点在最大值与最小值的时候时最优的,所以如果使得左右端点不合法的情况,这种情况是一定不优的,所以不会对答案有影响…
bzoj4477: [Jsoi2015]字符串树
bzoj4481: [Jsoi2015]非诚勿扰
这题嘛…不会等比数列求和也没关系
我们发现要求是double输出
那么可以知道,
0.6
0.6
0.6最多就给你跑个
80
80
80次就约等于
0
0
0了
于是直接对于每个人暴力算概率
然后树状数组求和
bzoj4482: [Jsoi2015]套娃
式子拆一下的话每个套娃的贡献就是
i
n
[
i
]
∗
B
[
i
]
−
o
u
t
[
i
]
∗
B
[
f
a
]
in[i]*B[i]-out[i]*B[fa]
in[i]∗B[i]−out[i]∗B[fa]
那按
o
u
t
[
i
]
out[i]
out[i]大小从大往小排序,选择能放的最大的
B
[
i
]
B[i]
B[i]作为套在他上面的
正确性显然
bzoj4484: [Jsoi2015]最小表示
用一个bitset维护每个点
i
i
i能去到的点
然后跑一遍拓扑序
对于每一个点,在扫到他之后
我们按拓扑序从大往小扫与他有边相连的点,这里大的指后被扔进队列里的意思
然后如果一个点和当前这个点能去到的是一样的,那么这条边显然可以被扔掉
因为拓扑序大的显然是不可能被拓扑序小的给访问到的,所以正确性显然
bzoj4485: [Jsoi2015]圈地
最小割
S向一个人的地连边,另一个人的地向T连边
然后相邻的地连无向边
这样显然可以保证如果两个人选择了相邻的地,那么有一堵墙会被修起来
bzoj4486: [Jsoi2015]串分割
可能略微有技术含量的一题?
首先我们先知道如果比较两个大数
先跑一遍SA,然后比较后缀的排名
哈希先判这两个数是否完全相同,否则就是排名较小的那个小一点
然后显然可以知道最大那个数的长度是多少,就是
⌈
n
k
⌉
\lceil \frac{n}{k}\rceil
⌈kn⌉
那么我们把这样的
n
n
n个数拿出来,排个序,二分答案
贪心的想,每次当然选能选的最远位置去切割
可以注意到,合法的开头只有
⌈
n
k
⌉
\lceil \frac{n}{k}\rceil
⌈kn⌉个,并且每次最多跑
k
k
k次匹配
那么复杂度就是优秀的
n
l
o
g
n
nlogn
nlogn了
bzoj4487: [Jsoi2015]染色问题
n
3
n^3
n3可过那就直接
(
−
1
)
k
(-1)^k
(−1)k容斥
枚举
n
,
m
,
K
n,m,K
n,m,K表示至少缺少了多少行/列/颜色
直接算就过了…
bzoj4488: [Jsoi2015]最大公约数
如果固定一个左端点,那么
g
c
d
gcd
gcd不同的右端点只有
l
o
g
log
log个
预处理每个点向右最多能去到哪个使得这一段
g
c
d
gcd
gcd都相同的点
直接暴力跳就可以了
bzoj4489: [Jsoi2015]地铁线路
咕咕咕
本文深入解析了JSOI2015竞赛中多个题目,包括子集选取、送礼物、字符串树等问题,详细阐述了解题思路与算法实现,如分数规划、单调队列维护、拓扑排序等高级技巧。
203

被折叠的 条评论
为什么被折叠?



