zoukankan      html  css  js  c++  java
  • 第K大C

    • 题意

      给定数组\(a_{N,M}\)\(b_N\),定义序列\({c_N}\)满足:

      \[c_i=\sum_{j=0}^{N-1} a_{j,b_{i\times j\bmod N}} \]

      求第\(K\)大的\(c_i\)

      \(N < 2.5\times 10^5,M \leq 4,a_i,b_i \in [0,1024)\)且保证\(N\)为质数

    • 题解

      注意到\(M \leq 4\),所以\(c_i\)可以写成这样:

      \[c_i=\sum_{k=0}^{M-1} \sum_{j=0}^{N-1} a_{j,k}[b_{i\times j\bmod N}=k] \]

      因为\(N\)为质数,所以此时可以运用经典套路,设\(N\)的原根为\(g\),将每个\(i \to i'(g^{i'} \equiv i\pmod N)\)所以有

      \[c_i=\sum_{k=0}^{M-1}\sum_{j=0}^{N-2} a_{j,k}[b_{(i+j)\bmod (N-1)}=k] \]

      我们令\(g_i=[b_{i\bmod (N-1)}=k]\),第一层循环不看,就有

    \[ \sum_{j=0}^{N-2} a_jg_{i+j} \]

    这显然是一个卷积的形式,可以考虑翻转或倍长。

    这样就做完了,时间复杂度\(O(MN\log N)\)

    • 一些细节

      因为\(0\)无法用原根的幂表示,所以对于下标为\(0\)的特殊处理一下。如果有更简单的方法或者说我写的有问题,欢迎大家指出。

  • 相关阅读:
    FPM
    Docker记录
    阿里云ECS发送企业邮件
    git操作
    vscode+vagrant+xdebug调试
    Spring Security开发安全的REST服务
    559. Maximum Depth of N-ary Tree
    《算法图解》之散列表
    766. Toeplitz Matrix
    893. Groups of Special-Equivalent Strings
  • 原文地址:https://www.cnblogs.com/leukocyte/p/13604814.html
Copyright © 2011-2022 走看看