[海军国际项目办公室]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 (p1)(p1)=p22p+1=(p2)p+1 所以我们代表 p − 1 p-1 p1 的数字不会再最高位上出现。
我们找到那个数没在最高位上出现就可以找到 p − 1 p-1 p1
( p − 1 ) x = ( x − 1 ) p + ( p − x ) (p-1)x=(x-1)p+(p-x) (p1)x=(x1)p+(px) 所以我们用 x x x p − 1 p-1 p1 相乘就可以在最高位得到 x − 1 x-1 x1 代表的数字。
不断这样推下去,就可以得到 [ 1 , p − 1 ] [1,p-1] [1,p1] 中所有数字对应的数字。
剩下一个没用的就是 0 0 0
时间复杂度 O ( p 2 ) O\\left(p^2\\right) O(p2)
code

幸运数字

显然,我们可以对于每一位单独求有多少中方法在这里出现了 4 4 4
对于 n ⩽ 40 n\\leqslant 40 n40,很容易猜到分成左右 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×10i1,5×10i1) [ 14 × 1 0 i − 1 , 15 × 1 0 i − 1 ) [14\\times 10^{i-1},15\\times10^{i-1}) [14×10i1,15×10i1) 的区间,这两个区间的大小就是左边数的答案。
由于我们是的 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=1n1aiai+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的主要内容,如果未能解决你的问题,请参考以下文章

[海军国际项目办公室]打拳

[海军国际项目办公室]羽未

[海军国际项目办公室]石子游戏

[海军国际项目办公室]游戏

[海军国际项目办公室]假人

[海军国际项目办公室]快递