zoukankan      html  css  js  c++  java
  • Test0612 继续扮演

    题意简述

    给定两个长度为 (N(Nleq 10^5)) 的非负整数序列 (a)(b) 。定义 (b)(k) 变换后得到的 序列 (b')(b'_i=b_{(i+k) mod d}) 。要求求出所有的 (k) ,满足 (b)(k) 变换后的 (b') 序列满足:存在一个 (m) 次的多项式 (P(t)) ,使得 (forall tin[0,n)) ,均满足 (P(t) equiv a_t-b'_tpmod{998244353})

    题意分析

    ​ 定义两个序列相似:若存在一个 (m) 次的多项式 (P(t)) ,使得 (forall tin[0,n)) ,均满足 (P(t)=A_t-B_t) ,则称序列 (A) 与序列 (B) 相似,记做 (A hicksim B) 。序列相似具有传递性:若 (A hicksim C)(B hicksim C) ,则 (A hicksim B)

    ​ 假定序列长度恰好是 (m+2) 。根据序列相似的传递性,我们可以考虑间接证明 (A)(B) 是否相似。构造长度同样为 (m+2) 的全 (0) 序列 (C={0,0,0,...})(下标从 (1) 开始)。利用 (A)(C) 的前 (m+1) 位做差构造出多项式 (R) ,再令 (C_{m+2}=-R(m+2)+A_{m+2})。那么此时得到的序列 (C) 与序列 (A) 相似。同时,我们记 (C_{m+2}) 为序列 (A) 的特征值。则序列 ([A_1,A_{m+2}]) 的特征值 (lambda (A_1,A_{m+2})=-sum_{i=1}^{m+1}A_i imes g_i(g_i=prod_{j=1}^{jleq m+1&j e i }frac{m+2-j}{i-j})+A_{m+2}) 。同理可以得到序列 (B) 的特征值。若序列 (A) 的特征值与序列 (B) 的特征值相同,那么 (A hicksim C hicksim B) ;反之,则 (A ot hicksim B)特征值相同是两序列相似的充要条件

    ​ 但是序列的长度可能不是 (m+2)。这时该如何判断序列相似呢?我们可以先令 (alpha(i)=lambda(A_i,A_{i+m+1})) ,同理得到 (eta(i)) 。现在考虑如何通过 (alpha)(eta) 来判断当前情况下序列 (A) (B) 是否相似。这时有一个结论:如果 (alpha(i)=eta(i))(alpha(i+1)=eta(i+1)) ,那么 序列 (A[i,i+m+2])(B[i,i+m+2]) 也是相似的(因为这两个 (m) 次多项式过了相同的 (m+1) 个点,所以这两个多项式是等同的)。也就是说,如果在 ([1,n-m-1]) 的这一段前缀中均有 (alpha(i)=eta(i)) 那么 (A hicksim B)

    ​ 但是 (B) 还可以旋转。如果每次旋转都重新求特征值,复杂度显然不能接受。考虑到当 (B) 旋转时,序列 ([l,r]) 变成了 ([l+k,r+k]),它们所对应的多项式的图像仅仅是横坐标均 (+k) 而已,但是特征值只与纵坐标有关。故:旋转不会改变特征值。再深入思考,既然旋转不会改变特征值,那么在最原始的 (B) 序列中,最后面 (m+1) 个数的 (eta) 值就可以通过倍增 (B) 处理出来。得出完整的 (eta) 序列后,再与 (alpha) 做一次字符串匹配统计相同的前缀个数以及位置就可以了。

    ​ 最后的关键问题:在求解 (alpha)(eta) 时,若对每个点暴力求解,复杂度高达 (O(n imes m)) 无法接受。而其实 (alpha(x)=sum_{i=x}^{m+x+2} A_i imes g_i)两个多项式的下标相同时做法可以用减法卷积FFT来优化 。于是这个题就完结撒花了。于是这个人也完结撒花了

    反思归纳

    针对某个序列的性质,如果能将这个性质折射到某一个数上面,那就再好不过了

  • 相关阅读:
    各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写
    How to see log files in MySQL?
    git 设置和取消代理
    使用本地下载和管理的免费 Windows 10 虚拟机测试 IE11 和旧版 Microsoft Edge
    在Microsoft SQL SERVER Management Studio下如何完整输出NVARCHAR(MAX)字段或变量的内容
    windows 10 x64系统下在vmware workstation pro 15安装macOS 10.15 Catelina, 并设置分辨率为3840x2160
    在Windows 10系统下将Git项目签出到磁盘分区根目录的方法
    群晖NAS(Synology NAS)环境下安装GitLab, 并在Windows 10环境下使用Git
    使用V-2ray和V-2rayN搭建本地代理服务器供局域网用户连接
    windows 10 专业版安装VMware虚拟机碰到的坑
  • 原文地址:https://www.cnblogs.com/parauni-blog/p/13137566.html
Copyright © 2011-2022 走看看