[JXOI2018]游戏
先筛除不能被其它数表示的"质数”,假设有 sum 个
枚举要通知多少个,最后一个必须是 “质数”,所以强制提出来,然后前后随便排列
a
n
s
=
∑
i
=
s
u
m
n
i
∗
(
n
−
s
u
m
n
−
i
)
∗
(
n
−
i
)
!
∗
(
i
−
1
)
!
∗
s
u
m
ans=\sum_{i=sum}^n i*\binom{n-sum}{n-i}*(n-i)!*(i-1)!*sum
ans=∑i=sumni∗(n−in−sum)∗(n−i)!∗(i−1)!∗sum
[JXOI2018]排序问题
我们需要让
∏
c
n
t
i
!
\prod cnt_i!
∏cnti! 尽量的小,也就是
c
n
t
cnt
cnt尽量的平均
于是我们可以二分出
c
n
t
i
cnt_i
cnti 中的最小值的最大值,我们令这个值为 ans
那么我们现在就可以知道了
c
n
t
i
cnt_i
cnti 的分布
对于
[
l
,
r
]
[l,r]
[l,r] 内个数
≤
a
n
s
\le ans
≤ans的, 把它加到
a
n
s
ans
ans, 如果最后还剩,就加一些到
a
n
s
+
1
ans+1
ans+1
如果不在
[
l
,
r
]
[l,r]
[l,r] 或
c
n
t
i
>
a
n
s
cnt_i > ans
cnti>ans 的,直接乘上就可以了
[JXOI2018]守卫
如果要看到
[
l
,
r
]
[l,r]
[l,r] 的话,r 必须设一个,设 r 能看到的最左边是
p
p
p, 那么
p
p
p 或
p
−
1
p-1
p−1 一定要设一个
于是可以枚举右端点,然后左端点往前扫,
f
l
,
r
=
m
i
n
(
f
l
,
p
,
f
l
,
p
−
1
)
+
g
p
,
r
f_{l,r} = min(f_{l, p}, f_{l, p-1}) + g_{p, r}
fl,r=min(fl,p,fl,p−1)+gp,r
然后边往前扫边更新 g,如果 r 可以看到当前点,那么
g
n
o
w
,
r
=
m
i
n
(
f
n
o
w
,
p
,
f
n
o
w
,
p
−
1
)
+
g
p
,
r
g_{now,r} =min(f_{now,p}, f_{now,p-1})+ g_{p, r}
gnow,r=min(fnow,p,fnow,p−1)+gp,r