[字符串HASH][复杂度分析] NOI2017 .Day1 T2 蚯蚓排队

PCL-181车载炮与XPT-3制导弹药:现代炮兵精确打击技术解析 精确制导技术是现代火力打击体系的核心,其原理在于通过卫星导航、惯性测量等复合制导方式,在飞行末段修正弹道,将打击精度从百米级提升至米级。这项技术的核心价值在于实现了从“面覆盖”到“点摧毁”的质变,极大提升了火力效能,并降低了后勤负担与附带损伤。在工程实践中,它被广泛应用于对高价值、高机动、强防护的时敏目标进行快速精确打击。本文以PCL-181高机动数字化火炮平台与XPT-3制导弹药的技术协同为例,深入剖析了“侦察-指挥-打击-评估”这一完整杀伤链的运作,展现了**制导原理**如何与**系统架构**深度融合, 阅读详情

因为k只有50,所以先把所有询问的字符串拆开,加到hash表里,然后用链表模拟整个过程,暴力把新产生的或消失的字符串在hash表里更新答案,复杂度就是对的
具体做法和时间复杂度分析可以看lzz的知乎回答
https://www.zhihu.com/question/62597216

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <assert.h>
#define fi first
#define se second

using namespace std;

typedef unsigned long long Ull;
typedef pair<Ull,int> Ui;

const int N=5e5+10,P=998244353,M=6e6+20,mod=5780347,base=17;

inline char nc(){
  static char buf[100000],*p1=buf,*p2=buf;
  return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}

inline void rea(int &x){
  char c=nc(); x=0;
  for(;c>'9'||c<'0';c=nc());for(;c>='0'&&c<='9';x=x*10+c-'0',c=nc());
}

inline int rea(int *x){
  char c=nc(); int len=0;
  for(;c>'9'||c<'0';c=nc());for(;c>='0'&&c<='9';x[len++]=c-'0',c=nc());
  return len;
}

inline Ull Pow(Ull x,int y){
  Ull ret=1;
  for(;y;y>>=1,x=x*x) if(y&1) ret=ret*x;
  return ret;
}

struct Hashtable{
  int nxt[M],cnt;
  struct nodes{
    Ui val;
    nodes *nxt;
  }node[M],*G[M];
  Ui notf;
  Hashtable(){ cnt=0; notf=Ui(-1,-1);}
  Ui *insert(Ull x){
    int u=x%mod;
    for(nodes *i=G[u];i;i=i->nxt)
      if(i->val.fi==x) return &i->val;
    int cur=++cnt;
    node[cur].val.fi=x; node[cur].val.se=0; node[cur].nxt=G[u]; G[u]=node+cur;
    return &node[cur].val;
  }
  Ui *find(Ull x){
    int u=x%mod;
    for(nodes *i=G[u];i;i=i->nxt)
      if(i->val.fi==x) return &i->val;
    return &notf;
  }
}Ht;

struct works{
  int type;
  vector<Ui*> q;
  int bg,ed,k;
  int x,y;
}Q[N];

int s[M],lst,cur;
struct A{
  int len;
  A *nxt,*pre;
}a[N];
int n,m,maxk;

inline void Modify(A *x,A *y,int d){
  Ull val=0,prod=1; A *cur=x;
  for(int i=1;i<maxk;prod*=base,i++){
    val+=prod*cur->len; 
    Ull key=val; A *now=y;
    for(int j=1;j<=maxk-i;j++){
      key=key*base+now->len;
      Ui *it=Ht.find(key);
      if(*it!=Ht.notf) it->second+=d;
      if(!now->nxt) break;
      now=now->nxt;
    }
    if(!cur->pre) break;
    cur=cur->pre;
  }
}

void print(int x){
  if(x>=10) print(x/10);
  putchar(x%10+'0');
}

int main(){
  rea(n); rea(m);
  for(int i=1;i<=n;i++) rea(a[i].len);
  for(int i=1;i<=m;i++){
    rea(Q[i].type);
    if(Q[i].type==3){
      cur=lst+rea(s+lst); rea(Q[i].k);
      maxk=max(maxk,Q[i].k);
      Q[i].bg=lst; Q[i].ed=cur;
      Ull val=0,pw=Pow(base,Q[i].k);
      for(int j=Q[i].bg;j<Q[i].bg+Q[i].k;j++)
    val=val*base+s[j];
      Q[i].q.push_back(Ht.insert(val));
      for(int j=Q[i].bg+Q[i].k;j<Q[i].ed;j++)
    val=val*base+s[j]-pw*s[j-Q[i].k],Q[i].q.push_back(Ht.insert(val));
    }
    else if(Q[i].type==1) rea(Q[i].x),rea(Q[i].y);
    else rea(Q[i].x);
  }
  for(int i=1;i<=n;i++){
    Ui *it=Ht.find(a[i].len);
    if(*it!=Ht.notf) it->second++;
  }
  for(int k=1;k<=m;k++){
    if(Q[k].type==3){
      int ans=1;
      for(int j=0;j<Q[k].q.size();j++)
    ans=1LL*ans*Q[k].q[j]->se%P;
      print(ans); putchar('\n');
      //printf("%d\n",ans);
    }
    else if(Q[k].type==1){
      Modify(a+Q[k].x,a+Q[k].y,1);
      a[Q[k].x].nxt=a+Q[k].y; a[Q[k].y].pre=a+Q[k].x;
    }
    else{
      Modify(a+Q[k].x,a[Q[k].x].nxt,-1);
      a[Q[k].x].nxt=a[Q[k].x].nxt->pre=0;
    }
  }
  return 0;
}
短信验证码接收平台完整搭建教程(超详细版,附完整源码) 在网站注册、用户登录、找回密码等功能中,验证码(特别是短信验证码)已成为验证用户身份的常见方式。本教程将详细介绍如何从零搭建一个短信验证码接收平台,用于保存、展示并管理来自短信网关或中间转发程序提交的验证码数据。✅ 教程适合有基本 Python/HTML 基础的开发者🚫 禁止用于任何违法用途,仅供学习参考✅ 支持通过 POST 接口接收短信验证码✅ 支持通过网页实时查看验证码历史记录✅ 验证码信息保存在 SQLite 数据库✅ 支持时间戳排序、查询最新验证码。 阅读详情

相关推荐

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 417

[NOI2017] 整数,蚯蚓排队,泳池

马上国赛了,越来越多的知识漏洞,我该怎么办

偶耶的博客 760

VQGAN实战:从文本到高清图像的保姆级生成教程(含PyTorch代码)

本文详细介绍了VQGAN(Vector Quantized Generative Adversarial Network)在文本到高清图像生成中的应用,提供了从环境配置到模型加载、文本编码及图像生成的完整PyTorch代码教程。通过实战案例和高级调优技巧,帮助开发者快速掌握VQGAN的核心技术,实现百万像素级的高清图像生成。

u8v9w0x1y的博客 649

[NOI 2017]蚯蚓排队

Description 题库链接 蚯蚓幼儿园有 \(n\) 只蚯蚓。幼儿园园长神刀手为了管理方便,时常让这些蚯蚓们列队表演。 所有蚯蚓用从 \(1\) 到 \(n\) 的连续正整数编号。每只蚯蚓的长度可以用一个正整数表示,根据入园要求,所有蚯蚓的长度都不超过 \(6\) 。神刀手希望这些蚯蚓排成若干个队伍,初始时,每只蚯蚓各自排成一个仅有一只蚯蚓的队伍,该蚯蚓既在队首,也在队尾。 神刀手将会依次进...

weixin_30421525的博客 209

深入探究贝叶斯网络(Bayesian Network):从基础原理到实际应用

贝叶斯网络,也称为信念网络或有向无环图模型,是一种概率图模型。它使用有向无环图(DAG)来表示随机变量之间的条件依赖关系。每个节点代表一个随机变量,边表示变量之间的条件依赖关系。贝叶斯网络作为一种强大的工具,通过结合概率论和图论,为复杂系统建模和推理提供了有效手段。无论是在医学诊断、故障检测还是自然语言处理等领域,它都展示了巨大的潜力。然而,其计算复杂度高、结构学习困难等挑战也需要我们在实际应用中不断优化算法和技术。希望通过本文,你能对贝叶斯网络有更深入的理解,并能够在实际项目中灵活应用这一强大工具。

qq_28791753的博客 5968

结合 Conda 手动安装 RepeatMasker

RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。

m0_65437087的博客 2535

Luogu3823 NOI2017 蚯蚓排队

题面:luogu3823 题意:nnn只蚯蚓,每只蚯蚓有一个≤6\le 6≤6的长度,初始时每只蚯蚓一支队伍。给出mmm个操作。 三种操作: 将以iii结尾的队伍和以jjj开头的队伍合并,且iii的队伍在前。 将iii和iii后面一只蚯蚓处断开,分为两支队伍。 定义以第xxx只蚯蚓开始的长度为kkk的数字串为:从xxx开始的连续kkk只蚯蚓,它们的长度数字连成的字符串。定义给定一个字符串sss和...

wennitao的博客 725

5分钟搞定单细胞marker基因气泡图:scDotPlot保姆级教程(含Seurat适配)

本文提供了一份详细的scDotPlot R包使用教程,帮助用户在5分钟内完成单细胞marker基因气泡图的绘制。教程涵盖环境准备、Seurat和SingleCellExperiment对象的适配处理、进阶可视化技巧及自动化报告生成,特别适合生物信息学新手和临床研究者快速掌握这一高效的可视化工具。

weixin_29047545的博客 261

【NOI】2017 蚯蚓排队(BZOJ 4943,LOJ 2303) 模拟+hash

【题目】#2303. 「NOI2017」蚯蚓排队 【题意】给定n条长度不超过6的蚯蚓,初始各自在一个队伍。m次操作:1.将i号蚯蚓和j号蚯蚓的队伍合并(保证i为队尾,j为队首)。2.将i号蚯蚓和它后面的蚯蚓分离成两个队。3.询问:给定字符串S和正整数k,求f(每个长度为k的子串)的乘积。其中f(S)定义为蚯蚓在其队伍向后延伸k位组成的字符串等于S的蚯蚓个数。\(n \leq 2*10^5,m \l...

weixin_34278190的博客 239

合宙Air780EP速连OneNET:AT+MQTT应用指南

本文详细讲解了合宙Air780EP使用AT指令通过MQTT接入OneNET的过程。

2401_82812461的博客 1389

基于Zemax的干涉仪仿真——Fizeau球面干涉仪

最近在用Zemax仿真干涉仪,在这之前查资料都是关于一些平面干涉仪的仿真,很少有关于Fizeau型的,尤其是球面干涉仪的仿真,看到很多关于这方面的问题回复都说利用多重结构仿照Zemax马赫-泽德干涉仪去做,但是也没有具体的过程,因此在这里分享一下我仿真的干涉仪步骤方法,具体是利用多重结构完成的仿真。

weixin_46657737的博客 6408

[NOI2017]蚯蚓排队 题解

题目就是要求我们能够支持三个操作: 1.把两个字符串合并 2.把两个字符串分裂 3.询问有多少一些个串是这么多串中出现了多少次 我们发现数据范围中的K很小,于是我们就考虑k与什么有关,也就是 我们发现第3中操作可以通过哈希表解决,(显而易见的吧) 那怎么维护哈希表? 我们思考,两个字符串a,ba,ba,b合并会增加哪些哈希值? 其实就是那些即有aaa的部分又有bbb部分的子串。 这样的串 ...

Hacheylight 446

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 889

NOIP 2016 蚯蚓 题解

题目传送门(洛谷)        题目大意:有n条蚯蚓,每次把最长的切成两半,长度分别为⌊px⌋和x-⌊px⌋,其他的蚯蚓长度加q,重复m次,问某些时候切的蚯蚓的长度和最后的一些蚯蚓的长度。        十分显然的,这道题我们可以用堆轻易实现,用堆来维护最长的蚯蚓,拿出来切成两半然后再塞回堆里面去。顺手再输出一下,这道题就ok了,于是我无脑的打出了以下代码: #include &lt;c...

a_forever_dream的博客 1170

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

138. 兔子与兔子(哈希)

很久很久以前,森林里住着一群兔子。 有一天,兔子们想要研究自己的 DNA 序列。 我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。 然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。 注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。 输入格式 第一行输入一个 DNA 字符串...

tomjobs的博客 907

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【BZOJ4943】【NOI2017】蚯蚓排队(哈希)

题面 BZOJ 洛谷 UOJ 题解 记得去年看网络同步赛的时候是一脸懵逼的。 昨天看到zsyzsyzsy做了,今天就看了看。。 这不是HashHashHash的傻逼题吗。。。 呜。。。 开链表存一下前驱后继,因为询问长度不超过505050 那么,总的串的个数不超过50n50n50n,暴力hashhashhash一下然后拿哈希表存一下就好了。 我开始用的map然后TLE飞了...

小蒟蒻yyb的博客 465

[NOI2017]蚯蚓排队

题意:有一些蚯蚓,每个蚯蚓都有一个小于等于6的值,有m次操作   操作1:将两队蚯蚓连到一起   操作2:在蚯蚓x的队列中将x及x之前和x之后分为两队   操作3:给一个字符串s和整数k,对于s每个长度为k的字串,看有多少队蚯蚓中有这个子串,将每个子串的值乘起来作为答案   观察数据,有一个条件是k<=50,所以直接采用哈希做,每次合并就暴力枚举新产生的长度<=50的串,...

weixin_34269583的博客 208

用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)

第一个题目: int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N)  我们所知道的常规排序中,最优的解法也就是O(N*log2^N),那如何做到时间复杂度为O(N)呢? 运用哈希算法的思想就可以优化算法为O(N) void Sort(int* a, int n) { assert(a); con

ChaseRaod的博客 5232

NOIP2016Day2第2题 蚯蚓

队列

Luckfort 591

常见的hash算法及其原理

 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。   哈希表是根据设定...

Beyond_2016的博客 28万+

NOI2017蚯蚓排队

原题链接 发现 k<=50 ,在插入和删除时最多会影响不超过 k2 个串,用链表实现插入和删除,然后只需用哈希表维护每个长度不超过k的串的出现次数,哈希的话可以先用比较大的范围的值处理冲突,再映射到1e8的桶里统计。 考虑复杂度。 首先在删除时由于保证了 c<=1000 所以这部分复杂度是O(ck2)的。 插入时,如果插入操作很慢只有可能是连接两个长度不小于k的串,而...

dianlvgeng7763的博客 221

[线段树维护BITSET] NOI2017 .Day1 T1 整数

把数转换成二进制维护 那么进位就是把之后一段连续1变成0,后面的0变成1 退位就是把之后一段连续的0变成1,后面的1变成0 这样可以用线段树维护 有一个nlog2nn\log^2n的暴力,就是把这个数的每一个为1的位取出来,用线段树加进去,a为负的同理如果把原来的01序列压位一下(我压了30位),那么a最多跨2个30位整数,把这两位取出来,拼成一个60位整数,然后把加上去,因为最多进(退)一

CE玩家 1926

[2020.11.26NOIP模拟赛]询问【字符串hash】

正题 题目链接:https://www.luogu.com.cn/problem/U142342?contestId=37784 题目大意 一个字符串,定义两个字符串相似为用一些字母代替相同的字母后可以相同。 如urbbr=groorurbbr=groorurbbr=groor,apple≠abcdeapple\neq abcdeapple​=abcde 要求支持询问一个字符串的两个区间是否相似 解题思路 我们每个位置的hashhashhash值维护这个字母距离上一个与它相同的字母的距离,发现如果一个

QuantAsk 479

codeup22556 军事演习

codeup22556 军事演习

H优快云 1814

NOIP2016 提高组 第二天第二题 蚯蚓earthworm 题解

NOIP2016 提高组 第二天第二题 蚯蚓earthworm 题解 NOIP2016 提高组 Day2第二题 蚯蚓earthworm 题解 题目描述本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3。蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓。蛐蛐国里现在共有n只蚯蚓(n为正整

Jacky35 3125
上一篇: [线段树维护BITSET] NOI2017 .Day1 T1 整数
下一篇: [2-SAT]NOI2017 .day2 T1 游戏
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值