hdu 3973 AC's String(字符串hash+线段树单点修改)

【开源训练数据集2】10个最适合机器学习的股票市场数据集 ​随着加密货币在世界各地的兴起,人们现在有比以往更多的投资方式。然而,这并不像低买高卖那么简单。如果你能准确预测股市,你就会成为地球上最富有的人之一。因此,之前已经有关于如何利用情绪分析来预测股市的研究。对于那些希望构建类似预测模型的人,本文将介绍 10 个用于机器学习的股票市场和加密货币数据集。 阅读详情

题意:

题意:给出10000个模式串和一个长度为100000的匹配串,有两种操作:
1.查询匹配串的子串[L,R]是否存在于模式串中
2.修改匹配串某个位置的字符

解析:

将一个字符串看成是一个P进制的数字,那么可以知道每一个字符串都可以被唯一表示(P>256,并不考虑高精度)。可是由于字符串的长度比较大,那么我们无法保存如此大的数字。于是使用Hash mod2^64来作为Hash。(的却可能会冲突,可是冲突的概率趋于无穷小)
Hash(s,P)=s[0]∗PLen−1+s[1]∗PLen−2+…+s[Len−1]∗P0mod264
P随便选个素数什么的都可以。
之后假设没有修改操作,那么我们可以与处理出H[i]表示S[0..i]的Hash
那么为了获得S[l..r]的Hash,我们有:
S[0..r]=s[0]∗Pr+s[1]∗Pr−1+…+s[r]∗P0
S[0..l−1]=s[0]∗Pl−1+s[1]∗Pl−2+…+s[l−1]∗P0
于是
S[l..r]=s[l]∗Pr−l+s[l+1]∗Pr−l−1+…+s[r]∗P0
=S[0..r]–S[0..l−1]∗Pr−l+1
=H[r]–H[l−1]∗Pr−l+1
其中Pr−l+1显然直接预处理。
于是查询就可以O(1)
现在需要修改某些字符
于是可以使用一颗线段树来维护
[L..R]维护S[L..R]的Hash,这样更新查询均解决。更新和查询均为O(logN)级别

注意:

query的时候要更改查询的区间,因为这个错误debug了好久。

my code

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#define ls (o<<1)
#define rs (o<<1|1)
#define lson ls, L, M
#define rson rs, M+1, R
#define sigma_size 33
using namespace std;
typedef unsigned long long ll;
const int N = (int)2e6 + 10;
const int maxn = (int)1e5 + 10;
set<ll> mySet;

char str[N];
ll sumv[maxn<<2], H[maxn];

ll idx(char c) { return c - 'a' + 1; }

ll getHash(char *s) {
    int len = strlen(s);
    ll ret = 0;
    for(int i = 0; i < len; i++) {
        ret = ret * sigma_size + idx(s[i]);
    }
    return ret;
}

inline void pushUp(int o, int L, int R) {
    int M = (L + R) / 2;
    sumv[o] = H[R - M] * sumv[ls] + sumv[rs];
}

void init() {
    H[0] = 1;
    for(int i = 1; i < maxn; i++) {
        H[i] = H[i-1] * sigma_size;
    }
}

void build(int o, int L, int R) {
    if(L == R) {
        sumv[o] = idx(str[L]);
        return ;
    }
    int M = (L + R) / 2;
    build(lson);
    build(rson);
    pushUp(o, L, R);
}

ll query(int o, int L, int R, int ql, int qr) {
    if(ql <= L && R <= qr)
        return sumv[o];
    int M = (L + R) >> 1;
    if(qr <= M) return query(lson, ql, qr);
    else if(ql > M) return query(rson, ql, qr);
    return query(lson, ql, M) * H[qr - M] + query(rson, M+1, qr);
}

void modify(int o, int L, int R, int pos) {
    if(L == R) {
        sumv[o] = idx(str[pos]);
        return ;
    }
    int M = (L + R) >> 1;
    if(pos <= M) modify(lson, pos);
    else modify(rson, pos);
    pushUp(o, L, R);
}

int n, q;
int main() {
    init();
    int T, cas = 1;
    scanf("%d", &T);
    while(T--) {
        mySet.clear();

        scanf("%d", &n);
        for(int i = 0; i < n; i++) {
            scanf("%s", str);
            mySet.insert(getHash(str));
        }

        scanf("%s", str);
        int len = strlen(str);
        build(1, 0, len-1);

        char oper[5], c[5];
        int ql, qr, pos;

        printf("Case #%d:\n", cas++);
        scanf("%d", &q);
        for(int i = 1; i <= q; i++) {
            scanf("%s", oper);
            if(oper[0] == 'Q') {
                scanf("%d%d", &ql, &qr);
                ll ret = query(1, 0, len-1, ql, qr);
                puts(mySet.count(ret) ? "Yes" : "No");
            }else {
                scanf("%d%s", &pos, c);
                str[pos] = c[0];
                modify(1, 0, len-1, pos);
            }
        }
    }
    return 0;
}
【深度学习】基于BERT模型的情感分析(附实战完整代码+数据集) 情感分类是一个快速发展的研究领域,尽管众多模型和数据集在二分类任务中显示出很高的准确性,但细粒度的情感分类任务仍然是一个很大改进空间的领域。分析SST-5数据集,Munikar等人的先前工作表明,嵌入工具BERT允许使用简单的模型来实现最新的准确性。 阅读详情

相关推荐

【信道编码/Channel Coding】线性分组码

这是本专栏信道编码/Channel Coding的第二站,想对信道编码有一个系统性的认识可以看本专栏的信道编码的整体框架一文。而在本篇文章中,将介绍线性分组码的基本原理。

Tomatomatodo的博客 9244

AC‘s String(字符串哈希线段树 + set + 乘法逆元)

题目链接: AC’s String 大致题意 给定n个字符串(作为模式串), 和一个匹配串. 有如下两种操作: ​ ①询问匹配串[l, r]区间的子串是否是某个模式串. ​ ②修改匹配串x位置, 使其位置的字符变为y. 解题思路 字符串哈希线段树 下面的思路不适合不了解字符串哈希方式, 以及不会线段树的同学食用 如何判断两个字符串是否相等? 判断其哈希值是否相等即可. 那么对于每一个匹配串的子串是否为某个模式串, 我们可以将所有模式串的哈希值放到一个集合set中, 每次判断当前子串的哈希值是否存在于集合中

Fau的博客 292

Cesium实战:3DTiles模型分层分户抽屉效果实现全攻略(附完整代码)

本文详细解析了在Cesium中为3DTiles模型实现分层分户抽屉效果的核心原理与完整代码。通过“主-副双模型”策略,结合属性过滤与矩阵变换,开发者能够创建出可交互、可探索的动态建筑可视化效果,适用于数字孪生、智慧城市及BIM可视化等场景。

d6e7f8g9h的博客 293

AI短剧批量生产链路:凤希AI全自动短剧生成方案部署与验收

在内容工业化生产趋势下,AI视频生成正从单一环节工具走向全链路自动化流水线。其核心原理是将文本剧本、角色形象、分镜绘制、语音合成、字幕压制与视频拼接等模块解耦,再通过任务队列串联成端到端的生成管道。这种架构的价值在于显著降低系列短剧的重复制作成本,尤其适合角色设定固定、剧情模板明确的批量内容场景。对于抖音、快手等竖屏短剧团队,以及需要本地化部署的AI应用开发者而言,掌握从环境准备、全链路功能测试到API批量调用的完整验收方法,是落地AI短剧生产线的关键。本文以凤希AI全自动短剧生成方案为例,梳理了从单模块验

weixin_33762130的博客 208

基于Spring Boot框架的网上蛋糕销售系统

随着互联网的普及和电子商务的迅猛发展,网上购物已经成为人们日常生活的一部分。蛋糕作为一种受欢迎的食品,其销售市场也逐渐向网络化方向发展。网上蛋糕销售系统能够打破时间和地域的限制,让消费者随时随地浏览和购买蛋糕,同时也为蛋糕商家提供了一个展示和销售产品的平台。该系统的开发旨在提高蛋糕预定和销售的便捷性,节约时间和经济成本,并推动蛋糕市场的进一步发展。开发语言:Java,一种面向对象的编程语言,具有跨平台性、稳定性和安全性等特点,适用于构建大型、复杂的Web应用程序。 框架:Spring Boot,一个基于Sp

2301_81127431的博客 997

做了一个3DTiles编辑器,支持3DTiles的预览和裁剪导出

3DTiles编辑器的功能极其简洁,核心就是3DTiles格式模型的预览和裁剪。为了演示方便,本文所使用的源数据为mipmap3d[1]网站所提供的无人机拍摄影像,并进行3DTiles构建。打开软件,输入的绝对路径之后,点击添加模型,就可以将模型加载进预览区。之后,点击裁剪模式按钮,默认会出现立方体裁剪框,可通过拖动句柄的方式去调整裁剪框的范围。同时,除了默认的盒体裁切模式外,还支持多边形裁切,点击多边形裁切后,可切换到顶视图,选择重绘多边形,可进行打点绘制。

兴趣使然的创作者 601

HDU3973——线段树+字符串哈希

题解: 给我们n个单词,然后一个模式串,然后两种区间操作,一种是单点修改一个单词,一种是查询一个区间内是否是一个单词。 我们线段树维护区间哈希值。然后区间查询操作和区间。 #include <bits/stdc++.h> using namespace std; #define lson u<<1 #define rson u<<1|1 const int N=1e5+10,p=131; typedef unsigned long long ull; set<ull

行走天涯的豆沙包的博客 548

PCL 计算点云AABB包围盒的体积【2026最新版】

AABB包围盒又称了 轴对齐包围盒,是点云包围盒里最简单的一种,其计算方法也极其简单。获取包围盒之后,根据包围盒的长宽高进行体积计算即可!博客长期更新,本文最近一次更新时间为:2026年5月3日。

点云侠的博客 2295

HDU - 3973

题目链接:HDU - 3973 AC’s String 显然我们可以提前预处理每个子串的hash值。 然后对每个区间,我们需要快速求出hash值,并且支持修改。所以线段树维护即可。 每次查询在set当中找一下。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #define int long long using namespace std; const int N=1e5+1

青烟绕指柔的博客 444

核心组件大换血:Backbone与Neck魔改篇:YOLO26结合StarNet结构:2026星状网络在YOLO生态的即插即用实战

本文将介绍如何将StarNet作为Backbone替换YOLO26原生架构,以提升边缘设备上的目标检测性能。文章首先分析了YOLO26在特定场景下的精度瓶颈,指出其通用Backbone设计存在不足。随后深入解析StarNet的核心创新——星操作(Star Operation),这一低维计算却能获得高维特征表达的数学魔术,以及其极简的StarBlock模块设计。通过对比YOLO26原生架构的三大创新与痛点,作者提出两种替换策略:完整替换Backbone或局部替换+Neck联调。文中提供了StarNet核心代码

ZDQ58818的博客 289

图解目标检测 之 YOLO 算法 最全原理详解

YOLO 一.背景 YOLO(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统。在2017年CVPR上,Joseph Redmon和Ali Farhadi又发表的YOLO 2,进一步提高了检测的精度和速度。 二.YOLO算法的网...

DFCED的博客 26万+

hdu 3973(hash+线段树)

AC's String Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description You are given some words {Wi}. Then our stupid AC will give you a very long

hexianhao的博客 689

x265开源编码器源码框架深度解析

x265开源编码器源码框架深度解析

世界那么大,我想去看看~【随心更新,看世界去了😄】 669

HDU 3973 AC's String

<!-- @page {margin:0.79in} p {margin-bottom:0.08in; direction:ltr; color:#000000; text-align:justify; widows:0; orphans:0} p.western {font-family:"Calibri",sans-serif; font-size:1

1292765944的专栏 2367

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

fzu 2045 \ hdu 3973 AC's String(线段树+RK)

题意:给出10000个模式串和一个长度为100000的匹配串,有两种操作: 1.查询匹配串的子串[L,R]是否存在于模式串中 2.修改匹配串某个位置的字符 解法:由于RK函数满足区间加法啊,因此可以用线段树动态维护和查询某个子串的hash值,得到子串的hash值,剩下的就是普通的rk了。 将所有模式串的hash值放入map中,对于hash值相同的模式串使用链表串联起来,当获取某个子串的

新博客地址:sensirly.github.io 1319

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

HDU 3973 AC's String 字符串哈希

HDU 3973 通过哈希函数将一个字符串转化为一个整数,通过特定的方式可以使得这个哈希值几乎没有冲突(这就是关键之处,几乎没有视为没有= =!, 其实也可以考虑实现哈希冲突时的处理,只是这道题没必要而已),然后使用线段树维护修改后的哈希值。 因为输入的字符串只有26个,考虑使用一个大于等于26的素数p作为进制,然后将原串转化为一个p进制的数mod 2^63(也相当于自然溢出),然后这个数存入...

weixin_30900589的博客 110

HDU - 3973 AC's String(Hash+线段树)

http://acm.hdu.edu.cn/showproblem.php?pid=3973 题意 给一个词典和一个主串。有两种操作,查询主串某个区间,问这主串区间中包含多少词典中的词语。修改主串某一位置的字符。 分析 题目要求区间查询,和单点更新,那么最先想到的应该是线段树。可字符串怎么利用线段树呢?用hash!首先将词典按规则hash后放入map,然后将主串的hash值放置入线段...

weixin_34384681的博客 113

hash +线段树 HDU 3973 AC's String

本题使用字符串的Hash来解决。将一个字符串看成是一个P进制的数字(可以联想10进制数),那么可以知道每一个字符串都可以被唯一表示(P&gt; 256, 并不考虑高精度)。可是由于字符串的长度比较大,那么我们无法保存如此大的数字。于是使用Hash mod2^64来作为Hash.(的却可能会冲突,可是冲突的概率趋于无穷小)然后就是Hash(s,P) = s[0]*P^(Len-1) + s[1] *...

加油 (•̀ᴗ•́)و ̑̑ 235

hdu 3973 字符串hash+线段树动态维护

AC's String Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1091    Accepted Submission(s): 311 Problem Description You are given

写东西的地方 783

HDU 3973 (字符串,hash)

题意: 给一个字符串集合和一个长字符串,两种操作,单点修改长字符串的某个字母,查询长字符串的[L,R]区间对应字串是否在字符串集合中出现。 思路: 将字符串集合hash之后存在set&lt;ll&gt;中,用树状数组保存长字符串的各个位置的hash值,用sum(x)函数计算[0,x]的hash值,((sum(r)-sum(l-1))%mod+mod)%mod*qpow(qpow(base,l-...

陋室 274

hdu3973 线段树+哈希

原题:http://acm.hdu.edu.cn/showproblem.php?pid=3973 题解:m组询问子串是否出现过,和单点修改。将字符串哈希,放进线段树合并就可以了,根据下面的公式合并就行了 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #define ull unsigned ...

Exception 310

C语言-字符串

C语言中的字符串是以字符数组的形式存储的,以空字符'\0'作为结尾。字符串的长度可以使用strlen()函数获取。可以使用strcpy()复制字符串,使用strcat()连接字符串,使用strcmp()比较字符串。在操作字符串时,需要注意内存管理,确保字符数组大小足够,并及时释放动态分配的内存。字符串常量是静态分配的,不需要手动释放。字符串在输入输出、处理和操作中发挥重要作用。

少壮不努力,长大写程序 423

HDU3973-字符串哈希+线段树

HDU3973-字符串哈希+线段树 题目描述 即给你一个母串,和nnn个字符串,mmm次操作,每次操作有两种:1,询问母串中l到r位置的字串是否在nnn个字符串中出现过;2,修改母串中xxx位置的字母 题解 字符串哈希套线段树裸题(注意查询操作,对于类似的区间合并,常用该种查询方式) 还有一个坑,代码中有说 代码实现 #include <stdio.h>//字符串哈希套线段树-AC #...

Daniel__d的博客 314

AC's String HDU3973

http://acm.hdu.edu.cn/showproblem.php?pid=3973 线段树维护HASH #include #include #include #include #include #include #include #include #include #include #include #include #include #inclu

霁月难逢 彩云易散 985

HDU 3973 (哈希+线段树)

题目链接:点击打开链接 题意:给出一个原串和n个询问串,然后m个操作,询问分两种: 1:把x位置的字母改变;2:询问[x,y]之间的字符串是不是等于某个询问串。 先把每一个询问串的哈希值存到map里面,然后用线段树维护每一个区间的字符串的哈希 值,如果需要的串包含左右两个区间,就把右边区间求出的哈希值进左边区间的长度位。 #include #include #include #in

morejarphone~ 587

HDU 6356 Glad You Came(线段树)

HDU 6356 Glad You Came(线段树) 题意   给出一个n个元素的数组,开始所有的元素均为0,接下来有m个操作,每个操作的l,r,v都根据题中所给的RNG61函数给出,现在对区间[l,r]内,所有小于v的值均改为v。最后求i∈[1,n],所有的(i*a[i])异或值。 解题思路   当时想到了维护两个线段树,分别维护最小值和最大值,因为涉及到更新的时候,如果当前区...

博学 笃志 切问 近思 375
上一篇: hdu 5391 Zball in Tina Town(威尔逊定理)
下一篇: POJ 1182 食物链(带权并查集)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值