2023年杭电多校第一场-E.Cyclically Isomorphic题解

news2024/11/27 5:28:35

样例:

输入:

2
2 2
ab 
ba
1
1 2
4 3
aab
baa
bba
bab
6
1 2
1 3
1 4
2 3
2 4
3 4

输出:

Yes
Yes
No
No
No
No
Yes 

题目大意:

给定一个字符串数组,每次查询两个字符串是否可以通过一个字符串循环右移可以变成另一个字符串,循环右移定义如下:

aabbccds经过一次循环右移变成saabbccd,在经过一次就变成了dsaabbcc;

思路:

这个题首先我们想到的肯定预处理出来某些东西,后面查询时间直接比较就行。我们如果想要通过字符串右移使用substr分割,找出最小的来,或者把他的可能全部存下来,后面在进行字符串的比较,这样很显然时间复杂度太高了。因为每一个substr的时间复杂度是O(n),字符串比较的时间复杂度也是O(n),

所以我们优化一下,首先就是想,我们有没有什么算法可以比较快的找出最小的右移字符串。所以就找到了我们的板子,找循环串的最小表示。这个时间复杂度是O(s.size()),而substr的复杂度是O(n * s.size() * s.size() ),时间复杂度一下子降下来很多。

循环串的最小表示的板子:

string zuixiao(string s)  {
    int i, j ,k ,l;
    int N = s.length();
    s += s;
    for (i=0, j=1; j<N;) {
        for (k=0; k<N && s[i+k] == s[j+k]; k++) ;
        if (k >=N ){
            break;
        }
        if (s[i+k] <s[j+k]) {
            j += k+1;
        } else {
            l = i + k;
            i = j;
            j = max(l ,j) + 1;
        }
    }
    return s.substr(i, N);
}

其次我们可以在想,预处理的时间复杂度降下来了,但是后面比较时间的时间复杂度还没有降下来,每次两个字符串比较的复杂度是O(s.size() ) ,所以我们就需要在优化一下,既然不能用字符串比较,那我们就可以考虑怎么能转化成O(1),我们会想到数的比较可以实现,所以我们就想到了字符串哈希,用字符串哈希可以搞定。

字符串哈希的知识点 (我队友写的)

字符串哈希计算的板子:

ull jshx(string s){
    int len = s.size();
    for(int i = 1;i <= len;i++){
        h[i] = h[i - 1] * haxishu + s[i];
    }
    return h[len];
}

这个题的AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+10;
string s[N];
typedef unsigned long long ull;
const ull haxishu = 131;

ull h[N];
ull sshh[N];
string zuixiao(string s)  {
    int i, j ,k ,l;
    int N = s.length();
    s += s;
    for (i=0, j=1; j<N;) {
        for (k=0; k<N && s[i+k] == s[j+k]; k++) ;
        if (k >=N ){
            break;
        }
        if (s[i+k] <s[j+k]) {
            j += k+1;
        } else {
            l = i + k;
            i = j;
            j = max(l ,j) + 1;
        }
    }
    return s.substr(i, N);
}
void init(){
    h[0] = 1;
    for(int i = 1;i <= 1e5;i++){
        h[i] = h[i - 1] * haxishu;
    }
}
ull jshx(string s){
    int len = s.size();
    for(int i = 1;i <= len;i++){
        h[i] = h[i - 1] * haxishu + s[i];
    }
    return h[len];
}

void solve(){
    int n,m;
    h[0] = 1;
    cin >> n >> m;
    for(int i = 1;i <= n;i++){
        string s1;
        cin >> s1;
        s[i] = " " + s1;
        sshh[i] = jshx(zuixiao(s1));
    }
    int q;
    cin >> q;
    // cout << q;
    while(q--){
        int x,y;
        cin >> x >> y;
        if(sshh[x] == sshh[y]){
            cout << "Yes\n";
        }
        else cout << "No\n";
    }

}
int main()
{
    int T;
    cin >> T;
    while(T--){
        solve();
    }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java实现检测本地指定路径下某一个程序是否在运行

项目有一个需求需要通过网页超链接唤醒本地桌面程序&#xff0c;有一个小bug是重复打开桌面程序。需要后台开一个接口来判断本地桌面程序是否打开。可以通过以下简单的方法来实现。 要检测本地指定路径下某一个程序是否在运行&#xff0c;可以使用Java的ProcessBuilder类来实现…

千兆网口 VS 2.5G网口 VS 5G网口:如何选?

随着互联网应用的不断扩展和数据传输需求的增加&#xff0c;为了更好满足高质量、高效率的日常生活和工作需求&#xff0c;对于网络速度和数据传输能力的要求日益严苛。这推动了网络技术发展的进程。在千兆网口研发并普遍应用后&#xff0c;又进一步研发出了2.5G网口和5G网口两…

硬件知识:从1.0到5.3,各版本蓝牙协议有什么功能特点

目录 蓝牙1.0 蓝牙1.1 蓝牙1.2 蓝牙2.0 蓝牙2.1 蓝牙3.0 蓝牙4.0 蓝牙4.1 蓝牙4.2 蓝牙5.0 蓝牙5.1 蓝牙5.2 蓝牙5.3 不断更新的蓝牙协议升级了哪些功能&#xff1f; 蓝牙作为一种小范围无线连接技术&#xff0c;具有低功耗、低成本、方便快捷的特点&#xff0c;…

基于whisper和whisperx的语音视频和字幕对齐

环境的安装 创建py310虚拟环境,需要安装Anaconda的Python环境。 Python初学者在不同系统上安装Python的保姆级指引 Win10+Python3.9+GPU版pytorch环境搭建最简流程 Python虚拟环境的安装和使用 还需要提前安装FFmpeg用于音频操作,并添加到环境变量中。 创建一个名称为w…

中移链与BSN分布式云管平台集成,共同构建专属协同体系

01 中移链与BSN分布式云管平台集成&#xff0c; 融入BSN生态体系 中移链OPB&#xff08;OPB即开放联盟链&#xff0c;Open Permissioned Blockchain&#xff09;与BSN基于BSN分布式云管平台&#xff0c;打造了中移链专属门户、中移链专属运营、中移链专属运维功能模块&#x…

龙曲良 Tensorflow —— 随机梯度下降(自用)-4

目录 一、梯度下降 二、激活函数及其梯度 2.1 最简单的阶梯激活函数 2.2 sigmoid / logistic&#xff08;tf.sigmoid&#xff09; 2.3 tanh&#xff08;tf.tanh&#xff09; 2.4 ReLU&#xff08;tf.nn.relu&#xff09; 三、损失函数及其梯度 四、单、多输出感知机梯度…

springBoot使用webSocket的几种方式以及在高并发出现的问题及解决

一、第一种方式-原生注解&#xff08;tomcat内嵌&#xff09; 1.1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>1.2、配置文件 package …

HTML5——基础知识及使用

HTML 文件基本结构 <html><head><title>第一个页面</title></head><body>hello world</body> </html> html 标签是整个 html 文件的根标签(最顶层标签).head 标签中写页面的属性.body 标签中写的是页面上显示的内容.title 标…

LiveGBS流媒体平台GB/T28181功能-用户管理数据支持页面excel导入数据excel导出数据

LiveGBS功能-用户管理数据支持页面excel导入数据excel导出数据 1、用户管理2、Excel导出导入2.1、支持用户数据的Excel导出2.2、支持用户数据的Excel导入 3、搭建GB28181视频直播平台 1、用户管理 用户管理&#xff0c;支持配置添加管理员、操作员、观众等角色的用户&#xff…

QGIS二次开发:集成二维CAD控件MxDraw

本文记录在QGIS中集成MxDraw控件的方法。 一、安装MxDraw 参见笔者博文“FreeCAD二次开发&#xff1a;集成二维CAD控件MxDraw”所述的安装方法。 二、编译安装QGIS 参见笔者博文"Windows 10下编译安装QGIS"所述的编译安装方法。 二、集成方法 2.1 添加MxDrawVie…

JAVA主流压缩解压工具对比、用法与选取

一、JAVA主流压缩工具 java.util.zip&#xff1a; **说明&#xff1a;**Java标准库提供的压缩与解压功能&#xff0c;包含在java.util.zip包中。通过ZipInputStream和ZipOutputStream可以实现ZIP格式的压缩与解压缩操作。 适用场景&#xff1a; 适合简单的ZIP格式压缩与解压缩操…

FFMPEG android mac 编译 支持DASH/OPENSSL问题汇总

一 下载源码 FFMPEG https://github.com/FFmpeg/FFmpeg/tree/release/4.3 二 编写脚本 支持https 就必须添加open SSL 的编译 具体可以查看我的另一个关于open SSL 的 然后我们配置的一些路径 涉及 ndk 的一定要查看你用的ndk 版本 是否存在这些路径这是第一步 然后如果支…

按照Vue写WPF(1):属性绑定

文章目录 前言代码实现效果代码逻辑 总结 前言 作为一个使用Vue非常熟练的C#全干工程师。当我在接触WPF的时候&#xff0c;我就一直想用Vue的想法去重写WPF框架。经过一个星期的琢磨&#xff0c;终于琢磨出来了如何优雅的入参。期间看了上百篇博客&#xff0c;浏览了一堆的视频…

如何把打包的vue项目放到flask中:Flask init参数详解

参数列表 import_name: the name of the application package&#xff0c;感觉没什么用static_url_path: can be used to specify a different path for the static files on the web. Defaults to the name of the static_folder folder。描述静态文件&#xff08;css&#x…

vue3-Api和数据响应式的变化

问题1&#xff1a;为什么vue3中去掉了vue构造函数&#xff1f; 问题2&#xff1a;谈谈你对vue3数据响应式的理解 去掉了Vue构造函数 在过去&#xff0c;如果遇到一个页面有多个vue应用时&#xff0c;往往会遇到一些问题 <!-- vue2 --> <div id"app1">&…

sketch如何在线打开?有没有什么软件可以辅助

Sketch 在线打开的方法有哪些&#xff1f;这个问题和我之前回答过的「Sketch 可以在线编辑吗&#xff1f;」是一样的答案&#xff0c;没有。很遗憾&#xff0c;Sketch 没有在线打开的方法&#xff0c;Sketch 也做不到可以在线编辑。那么&#xff0c;那些广告里出现的设计软件工…

基于Java+SpringBoot+vue前后端分离网上购物商城系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【高阶数据结构】B树

文章目录 一、B-树1. 常见的搜索结构2. B树概念3. B-树的查找4. B-树的插入分析 二、B树和B*树1. B树2. B*树 三、B-树的应用1. 索引2. MySQL索引简介2.1 MyISAM2.2 InnoDB 一、B-树 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索…

体验文心千帆:开启智能大模型时代的新征程

目录 前言文心千帆的申请和使用感受1.1 注册流程简单1.2 试用初体验 二、文心千帆大模型平台功能介绍2.1 强大的对话式语言模型2.2 丰富的应用场景 三、如何使用 API3.1 API 列表ERNIE-BotERNIE-Bot-turboBLOOMZ-7BEmbedding-V1Prompt模板 3.2 API 调用基本流程3.2.1 创建智能云…

如何在armv6 armv7 armv8(aarch64)嵌入式板子上面安装nginx服务器,支持H265码流

如何在armv6 armv6 armv8 aarch64 嵌入式板子上面安装nginx服务器支持推送H265的视频流 开始吧 一&#xff0c;准备工作二&#xff0c;configure时遇到的出错问题1、checking for C compiler … found but is not working2&#xff0c;error: can not detect int size3&#xf…