正反哈希两种版子

1:这种版子开的二维数组更合理,用于单个字符串的最大长度,未知的情况,但是第二维大小只为2,故可以满足大部分情况

#define int unsigned long long
int n;
int p[N];
int h[N][2];
int l[N], r[N];
int get1(int l, int r)
{return h[r][0] - h[l - 1][0] * p[r - l + 1];
}
int get2(int l, int r)
{return h[r][1] - h[l - 1][1] * p[r - l + 1];
}void solve()
{p[0] = 1;for (int i = 1; i <= N; i++)p[i] = p[i - 1] * P;cin >> n;vector<string> s(n + 1);string S = " ";for (int i = 1; i <= n; i++){cin >> s[i];l[i] = r[i - 1] + 1;r[i] = l[i] + s[i].size() - 1;S += s[i];}int len = S.size() - 1;h[0][0] = 0;for (int i = 1; i <= len; i++){h[i][0] = h[i - 1][0] * P + S[i];}reverse(S.begin(), S.end());S = " " + S;h[0][1] = 0;for (int i = 1; i <= len; i++){h[i][1] = h[i - 1][1] * P + S[i];}int ans = 0;auto check = [&](int a, int b, int c) -> bool{int aa = s[a].size();int bb = s[b].size();int cc = s[c].size();if (get1(l[a], r[a]) * p[bb + cc] + get1(l[b], r[b]) * p[cc] + get1(l[c], r[c]) == get2(len - r[a] + 1, len - l[a] + 1) + get2(len - r[b] + 1, len - l[b] + 1) * p[aa] + get2(len - r[c] + 1, len - l[c] + 1) * p[bb + aa])return true;return false;};for (int i = 1; i <= n; i++){for (int j = 1; j <= i - 1; j++){for (int k = i + 1; k <= n; k++)if (check(j, i, k)){ans++;}}}cout << ans << endl;
}

2:这种版子开的二维数组,用于单个字符串的最大长度和字符串个数已经知道的情况,或者未知但都有一个限制,不然不好开二维数组的大小,时间效率不知道为什么比上面的要慢,不应该都是o(N)级别的吗

int n;
char s[M][20000];
int p[N];
int hash1[M][20000], hash2[M][2000];
int get1(int l, int r, int x)
{return hash1[x][r] - hash1[x][l - 1] * p[r - l + 1];
}
int get2(int l, int r, int x)
{return hash2[x][l] - hash2[x][r + 1] * p[r - l + 1];
}
void solve()
{cin >> n;for (int i = 1; i <= n; i++)cin >> s[i] + 1;p[0] = 1;for (int i = 1; i <= N; i++)p[i] = p[i - 1] * P;for (int i = 1; i <= n; i++){for (int j = 1; j <= strlen(s[i] + 1); j++){hash1[i][j] = hash1[i][j - 1] * P + s[i][j];}for (int j = strlen(s[i] + 1); j >= 1; j--){hash2[i][j] = hash2[i][j + 1] * P + s[i][j];// cout << hash2[i][j] << ' ';}// cout << endl;// cout << get1(1, strlen(s[i] + 1), i) << " " << get2(1, strlen(s[i] + 1), i) << endl;}int ans = 0;auto check = [&](int a, int b, int c) -> bool{int aa = strlen(s[a] + 1);int bb = strlen(s[b] + 1);int cc = strlen(s[c] + 1);if (get1(1, aa, a) * p[bb + cc] + get1(1, bb, b) * p[cc] + get1(1, cc, c) == get2(1, aa, a) + get2(1, bb, b) * p[aa] + get2(1, cc, c) * p[aa + bb])return 1;return 0;};

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

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

相关文章

cudnn8.1.1,cuda11.2的ldconfig报错

配置CUDNN遇到问题 /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 is not a symbolic link /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link /sbin/l…

酒精壁炉,现代取暖的便携选择

酒精壁炉作为现代室内取暖的一种选择&#xff0c;具有独特的特点和工作原理。酒精壁炉采用酒精作为燃料&#xff0c;为家庭提供舒适的温暖&#xff0c;同时具备一定的安全性和便携性。 酒精壁炉通常由金属或陶瓷制成&#xff0c;内部设有专门的燃烧器&#xff0c;用于燃烧酒精燃…

Discord Midjourney 安装使⽤教程(AI绘画)

安装步骤: 1.注册Discord账号 2.进⼊Midjourney社区创作 3.创建⾃⼰服务器 安装教程: 1.注册Discord账号 账号注册的方式&#xff1a; 注册地址: //账号注册地址https://discord.com/ 2.进⼊Midjourney社区创作 // 邀请链接: 官方的midjourneyhttps://discord.gg/midjo…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念&#xff0c;高性能计算与智算场景&#xff0c;高性能计算主要是面向天气预测、生物计算、材料计算等场景&#xff0c;而最近几年很火的智算主要是面向AI场景的计算&#xff0c;如语音识别、图像识别、自动驾驶等场景&#xff0c;我们可…

Qt实现的聊天画面消息气泡

Qt实现的聊天画面消息气泡 采用基于QWidgetMingw实现的原生的消息气泡 通过覆写QWidget::paintEvent(QPaintEvent *event)方法&#xff0c;每当窗口尺寸变化时都会触发paintEvent事件&#xff0c;在覆写QWidget::paintEvent(QPaintEvent *event)方法中重新绘制聊天气泡在QListW…

社交网络分析5:社交网络信息传播动力学。信息传播 、传染病模型、博弈模型和物理系统模型 、传播动力学分析 、 未来发展趋势与展望

社交网络分析5&#xff1a; 写在最前面信息传播动力学研究概述信息传播信息接收信息发布信息反馈信息传播的预测与控制 信息传播动力学研究的目标 社交网络信息传播模型传播模型的基本要素传播模型的数学表达传染病模型博弈模型物理系统模型 提出新的物理学模型三类模型的比较提…

ESP32 连接阿里云 MQTT 报错MQTT Connect err:2

解决方法 跳转到 这个头文件<PubSubClient.h>里 MQTT_MAX_PACKET_SIZE 把这个的大小从原来的256 改为1024 MQTT_KEEPALIVE 把这个大小从原来的15 改为65 修改后再次连接即可成功 如下图&#xff1a;

字体包引入以及使用

将UI给的字体包下载到assets文件夹下 app.vue全局定义 <style> * {margin: 0;padding: 0; }font-face {font-family: PangMenZhengDao-3;src: url(/assets/fonts/庞门正道标题体3.0.TTF) format(truetype);font-weight: bold;font-style: normal; } </style>页面使…

python如何发送企业微信群消息

一、创建机器人&#xff0c;并获取webhook 1.1 进入企业微信中&#xff0c;添加群机器人&#xff0c;添加完成后可以获取到一个webhook的地址 1.2 群机器人企业微信接口的调用可以参考这个文件 https://developer.work.weixin.qq.com/document/path/99110#%E5%A6%82%E4%BD%…

【图神经网络 · 科研思考4】动态图数据集相关 wikipedia.csv;跨域节点表示学习;跨域自监督;动态时空图跨域;无监督领域适应方法?

这是2023年11月份的部分科研思考(四),主体内容围绕【图神经网络】展开,科研疑问解答 & 科研基础概念了解 & 科研方向,仅学习使用。 🎯作者主页: 追光者♂🔥 🌸个人简介: 📝[1] CSDN 博客专家📝 🏆[2] 人工智能领域优质创作者🏆 �…

JS对象深度合并封装方法源码。

导入的方法看上一篇文章。 import deepClone from "./deepClone"; // JS对象深度合并 function deepMerge(target {}, source {}) { target deepClone(target); if (typeof target ! object || typeof source ! object) return false; for (var pro…

Vue3知识点总结

目录 一.创建Vue2工程 1.使用 vue-cli 创建 2.使用 vite 创建 二.常用 Composition API setup ref函数 reactive函数 计算属性与监视 1.computed函数 2.watch函数 3.watchEffect函数 一.创建Vue2工程 1.使用 vue-cli 创建 查看vue/cli版本&#xff0c;确保vue/cli版本…

QT自带打包问题:无法定位程序输入点?metaobject@qsound

文章目录 无法定位程序输入点?metaobjectqsound……检查系统环境变量的配置&#xff1a;打包无须安装qt的文件 无法定位程序输入点?metaobjectqsound…… 在执行release打包程序后&#xff0c;相应的release文件夹下的exe文件&#xff0c;无法打开 如有错误欢迎指出 检查系…

合并 K 个排序链表——Java解答

题目&#xff1a;合并 K 个排序链表 题目描述&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例&#xff1a; 假设有以下三个链表&#xff1a; 1->4->5, 1->3->4,…

AIGC实战——条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)

AIGC实战——条件生成对抗网络 0. 前言1. CGAN架构2. 模型训练3. CGAN 分析小结系列链接 0. 前言 我们已经学习了如何构建生成对抗网络 (Generative Adversarial Net, GAN) 以从给定的训练集中生成逼真图像。但是&#xff0c;我们无法控制想要生成的图像类型&#xff0c;例如控…

如何使用JavaScript 将数据网格绑定到 GraphQL 服务

前言 作为一名前端开发人员&#xff0c;GraphQL对于我们来说是令人难以置信的好用。它可以用来简化数据访问&#xff0c;这让我们的工作变得更加容易。 什么是 GraphQL&#xff1f;它是一个抽象层&#xff0c;位于任意数量的数据源之上&#xff0c;并为您提供一个简单的 API …

日期计算 C语言xdoj68

问题描述 给定一个年份y和一个整数d&#xff0c;问这一年的第d天是几月几日&#xff1f; 注意闰年的2月有29天&#xff0c;且满足下面条件之一的是闰年&#xff1a; 1&#xff09; 年份是4的整数倍&#xff0c;而且不是100的整数倍&#xff1b; 2&#xff09; 年份是…

激光雷达LIDAR

1. 历史 公元前440年&#xff0c;古希腊哲学家、预言家、科学家、江湖术士恩培多克勒提出月亮是由反射发光&#xff1b;提出光有速度。1638年&#xff0c;伽利略提着一盏灯站在山头上&#xff0c;默默的把灯盖了起来… 远处的另一个山头上&#xff0c;他的助手在看到灯灭的一瞬…

传统FC存储向NoF发展进化

全闪存时代背景下&#xff0c;传统的FC&#xff08;Fibre Channel&#xff0c;网状通道&#xff09;存储网络已经无法满足全闪存数据中心的要求&#xff0c;NVMe&#xff08;Non-Volatile Memory express&#xff0c;非易失性内存主机控制器接口规范&#xff09;存储协议的出现…

现网问题处理策略

收到问题时需要确认的问题 哪个局点 识别局点重要性使用哪些业务开启的特性数据量大小 哪个版本 找到我们产品的版本以及上游组件/底座版本 谁找来的 一线同事。一线直接面对客户&#xff0c;压力会比较大&#xff0c;需要严肃对待。下游业务同事。压力相对会较小。 最近…