[海军国际项目办公室]DLS Round
Posted StaroForgin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[海军国际项目办公室]DLS Round相关的知识,希望对你有一定的参考价值。
DLS Round 2
序列异或
感觉跟PPL的 JZM的询问3
有点像。
我们可以将
4
4
4 个数分成
2
2
2 段,相当于我们前
2
2
2 个数的异或只要与后两个数的异或值相等。
显然,我们可以先把前面的二元组
(
x
,
y
)
(x,y)
(x,y) 的异或值存在
y
+
1
y+1
y+1 里面,离线下来。
再从后往前更新后面的二元组
(
z
,
w
)
(z,w)
(z,w) 的异或值,这时候再将之前的异或值拿出来,扫到时看有多少相同的。
时间复杂度
O
(
n
2
)
O\\left(n^2\\right)
O(n2)。
code(干脆这篇文章就都放链接了)
乘法破译
个人感觉这道题才是这场最难的,我想得最久。
(
p
−
1
)
(
p
−
1
)
=
p
2
−
2
p
+
1
=
(
p
−
2
)
p
+
1
(p-1)(p-1)=p^2-2p+1=(p-2)p+1
(p−1)(p−1)=p2−2p+1=(p−2)p+1 所以我们代表
p
−
1
p-1
p−1 的数字不会再最高位上出现。
我们找到那个数没在最高位上出现就可以找到
p
−
1
p-1
p−1。
(
p
−
1
)
x
=
(
x
−
1
)
p
+
(
p
−
x
)
(p-1)x=(x-1)p+(p-x)
(p−1)x=(x−1)p+(p−x) 所以我们用
x
x
x 与
p
−
1
p-1
p−1 相乘就可以在最高位得到
x
−
1
x-1
x−1 代表的数字。
不断这样推下去,就可以得到
[
1
,
p
−
1
]
[1,p-1]
[1,p−1] 中所有数字对应的数字。
剩下一个没用的就是
0
0
0。
时间复杂度
O
(
p
2
)
O\\left(p^2\\right)
O(p2)。
code
幸运数字
显然,我们可以对于每一位单独求有多少中方法在这里出现了
4
4
4。
对于
n
⩽
40
n\\leqslant 40
n⩽40,很容易猜到分成左右
20
20
20 个,最后合起来求答案。
如果要在第
i
i
i 位得到
4
4
4,我们显然只需要去考虑第
i
i
i 位及其之前的数位。
我们不妨用双指针的方式,将所有数按第
i
i
i 位之前的数的大小排序,再记录下左边的数在右边对应的和为
[
4
×
1
0
i
−
1
,
5
×
1
0
i
−
1
)
[4\\times 10^{i-1},5\\times 10^{i-1})
[4×10i−1,5×10i−1) 与
[
14
×
1
0
i
−
1
,
15
×
1
0
i
−
1
)
[14\\times 10^{i-1},15\\times10^{i-1})
[14×10i−1,15×10i−1) 的区间,这两个区间的大小就是左边数的答案。
由于我们是的
i
i
i 是不断增大的,我们后面用来排序的位数也就越来越多,显然,这可以用一个基数排序的形式来维护数的顺序。
时间复杂度
O
(
2
n
2
log
10
2
n
2
)
O\\left(2^{\\frac{n}{2}}\\log_{10}2^{\\frac{n}{2}}\\right)
O(22nlog1022n)。
code 有点卡常
排列计数
经典的隔板
d
p
dp
dp,我第一次觉得的时候还以为有事什么高科技来着。
跟那个只维护
∑
i
=
1
n
−
1
∣
a
i
−
a
i
+
1
∣
\\sum_{i=1}^{n-1}|a_{i}-a_{i+1}|
∑i=1n−1∣ai−ai+1∣ 的题好像是一样来着。
将
a
a
a 按照大小排序,然后
d
p
dp
dp。
定义
d
p
i
,
j
,
0
/
1
,
0
/
1
dp_{i,j,0/1,0/1}
dpi,j,0/1,0/1 表选到第
i
i
i 个形成
j
j
j 段,左右端点有没有被选。
然后
d
p
dp
dp 就行了,只是每个
d
p
dp
dp要维护前
K
K
K 大的值与对应的方案数,打着有点想吐。
时间复杂度
O
(
n
2
K
2
)
O\\left(n^2K^2\\right)
O(n2K2)。
code
以上是关于[海军国际项目办公室]DLS Round的主要内容,如果未能解决你的问题,请参考以下文章