P11404 [RMI 2020] 蝶变 题解

news/2025/3/18 16:19:43/文章来源:https://www.cnblogs.com/Scarab/p/18779181

Description

定义一个长度为 \(2^k\) 的序列 \([a_0,a_1,\cdots,a_{2^k-1}]\) 蝶变之后的结果为 \([a_{\operatorname{rev}(0)},a_{\operatorname{rev}(1)},\cdots,a_{\operatorname{rev}(2^k-1)}]\),其中 \(\operatorname{rev}(i)\) 表示将 \(i\) 的二进制表示下最低 \(k\) 位翻转(reverse)后得到的结果。更为具体地说,令 \(i=\overline{b_kb_{k-1}\cdots b_1}\),则 \(\operatorname{rev}(i)=\overline{b_1b_{2}\cdots b_k}\)

定义一个长度为 \(2^k\) 的序列是美的,当且仅当蝶变后的序列与原序列相同。

给定一个长度为 \(N\) 的字符串 \(s\),字符集为小写英文字母。\(Q\) 次询问给定 \(i,k\),问 \(s[i:i+2^k-1]\) 是否是美的。

\(1\le N,Q\le 5\times 10^5\)

Solution

首先显然是用哈希判定。

\(f_k(i,B)\) 表示 \([a_i,a_{i+1},\ldots,a_{i+2^k-1}]\) 变换后的底数是 \(B\) 的哈希值,可以得到方程:

\[f_k(i,B)=f_{k-1}(i,B^2)+B\cdot f_{k-1}(i+2^{k-1},B^2) \]

观察到只有 \(O(\log n)\) 种底数,所以可以得到一个时空 \(O(n\log^2n)\) 的做法。

但是注意到区间长度除以 \(2\) 后指数会乘 \(2\),所以可以将 \(f_k(i,B)\) 的指数固定为 \(B^{2^{25-k}}\),这样每次就可以 \(O(1)\) 转移了。

时间复杂度:\(O(n\log n)\)

Code

#include <bits/stdc++.h>
#include "brperm.h"#ifdef ORZXKR
#include "grader.cpp"
#endifconst int kMaxN = 5e5 + 5, kMod = 998244353;int n, base = 114514;
int bs[20], hs[20][kMaxN], f[20][kMaxN];
std::string str;int qpow(int bs, int64_t idx = kMod - 2) {int ret = 1;for (; idx; idx >>= 1, bs = (int64_t)bs * bs % kMod)if (idx & 1)ret = (int64_t)ret * bs % kMod;return ret;
}inline int add(int x, int y) { return (x + y >= kMod ? x + y - kMod : x + y); }
inline int sub(int x, int y) { return (x >= y ? x - y : x - y + kMod); }
inline void inc(int &x, int y) { (x += y) >= kMod ? x -= kMod : x; }
inline void dec(int &x, int y) { (x -= y) < 0 ? x += kMod : x; }void init(int n, const char s[]) {::n = n;str.resize(n + 1);for (int i = 1; i <= n; ++i) str[i] = s[i - 1];for (int i = 0; i <= 19; ++i) {bs[i] = qpow(base, 1 << (30 - i));for (int j = 1, pw = bs[i]; j <= n; ++j, pw = 1ll * pw * bs[i] % kMod)hs[i][j] = add(hs[i][j - 1], 1ll * pw * (int)str[j] % kMod);}for (int i = 1; i <= n; ++i) f[0][i] = str[i];for (int i = 1; i <= std::__lg(n); ++i)for (int j = 1; j <= n - (1 << i) + 1; ++j)f[i][j] = add(f[i - 1][j], 1ll * bs[i] * f[i - 1][j + (1 << (i - 1))] % kMod);
}int query(int i, int k) {++i;if (k > std::__lg(n - i + 1)) return 0;return 1ll * sub(hs[k][i + (1 << k) - 1], hs[k][i - 1]) * qpow(qpow(bs[k]), i) % kMod == f[k][i];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900988.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识Open3D

Step01初识Open3d 程序代码: import open3d as o3d #导入Open3d库 def main():#定义主函数box = o3d.geometry.TriangleMesh.create_box(width=3.0, height=2.0, depth=1.0)#创建一个长方体对象box.compute_vertex_normals() #计算法向量vis = o3d.visualization.Visualizer(…

20222223 实验一《Python程序设计》实验报告

20222223 2024-2025-2 《Python程序设计》实验一报告课程:《Python程序设计》 班级: 2222 姓名: 李東霖 学号: 20222223 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

交换节点 - 环

树上交换节点给定一棵树,每个节点有一个权值。现在每次可以交换任意两个节点的权值,请问最少多少次交换可以使得每个节点的权值等于它的编号? 保证给出的权值是一个排列,也就是说保证一定有解。时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M输入描…

Arduino雷达使用Android移动应用程序

该系统可以检测障碍物并收集距离和角度信息,并且可以通过移动应用程序通过蓝牙进行控制。 Arduino雷达使用Android移动应用程序本项目是一个由超声波传感器和伺服电机驱动的雷达系统。该系统可以检测障碍物并收集距离和角度信息,并且可以通过移动应用程序通过蓝牙进行控制。该…

使用cursor打造智能客服demo

cursor AI它真的是非常强大。 今天讲下如何使用它,搭配deepseek api接口,来生成一个智能客服系统。这是最终的效果。首先cursor需要登录后才能使用。登录之后有两周的免费试用期。我们在窗口的右侧填写智能客服的需求。帮我实现一个网页智能客服。详细要求如下: 1.生成一个h…

【蓝牙小程序】小程序使用echart图表报错:setOption of undefined

转载自:https://developers.weixin.qq.com/community/develop/doc/0004ac054ccec0f26df7baa8756800问题:小程序使用echart图表报错 Cannot read property setOption of undefined;at api request success callback function TypeError: Cannot read property setOption of un…

前端中的Javascript

前端中的Javascript javascript定义方式内联JavaScript直接在HTML元素的事件属性中编写JavaScript代码<body><h1>Hello, World!</h1><button onclick="alert(Button clicked!)">Click Me</button> </body>内部JavaScript可以直接…

NVM:安装配置使用

一、简介 在实际的开发和学习中可能会遇到不同项目的 node 版本不同,而出现的兼容性问题。 而 nvm 就可以很好的解决这个问题,它可以在同一台机器上下管理多个 node 版本,使得程序员可以轻松地安装、卸载和切换不同的 node 版本。 在下载和配置 nvm 前,需要在控制面板中先删…

硬盘科普,M.2,PCI-E,NVMe 傻傻分不清

首先从三个层面去理解这个问题:物理接口,通道,协议 1:物理接口(相当于通讯中的电,光口) 大白话- 物理规格,像是 公路,铁路 专门跑PCI-E通道的那个物理接口:扩展性极强,可以插显卡的PCI-E X16的那个物理接口,或者插网卡,声卡的那个PCI-E X1那个物理接口,都是属于一类…

第二届长城杯ciscn半决赛awdp pwn以及应急响应wp

这次半决赛还真是状况频出,先是上午全场靶机断联了2轮,下午的应急又在坐大牢,还好是后面捋顺了逻辑做出来了,下半场干了个赛区第二,总成绩第四,这回是真燃尽了 上半场AWDP typo fix 一开始一直在改这道结果后面才发现那个prompt是真的好改,白浪费了3轮。。。 进入程序是…

LLM Assistance for Memory Safety

LLM Assistance for Memory SafetyMohammed, Nausheen, et al. "LLM Assistance for Memory Safety." 2025 IEEE/ACM 47th International Conference on Software Engineering (ICSE). IEEE Computer Society, 2024.Introduction 在软件安全的漏洞中,内存安全是主要…