20251005 耳朵龙字符串

news/2025/10/7 21:55:06/文章来源:https://www.cnblogs.com/Dreamerseve/p/19128933

图片

因为*最多只会有10个,所以被它截断成的串也很少。

每个串跑一边kmp得到匹配序列,然后DP即可


图片

发现每次扩展一个字符的时候broder的增加是有限的。

我们每次扩展它最大+2,我们默认他+2,然后check,不符合再缩减直到符合,用哈希验证即可,但是需要双哈希。

势能分析以下显然复杂度没问题


图片

串的长度只有logn种,并且串一定回文,总共也就最多n log n种串,直接哈希计算

图片

所以枚举修改位置和修改后字符,有26*n种方案。

然后剩下的就是分类讨论了。

图片


图片

发现从n一直跳kmp的next,一定能出现所有broder。

然后直接DP

图片


图片

一个很有趣的结论就是如果串[l,r]有k循环节

那么[l,r-k+1] === [l+k-1,r]

所以直接线段树维护哈希check即可,这个也要双哈希

点击查看代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;const int MOD1 = 1000000007;
const int MOD2 = 1000000009;
const int BASE = 91138233;struct Node {int len;ll h1, h2;int lazy;Node() : len(0), h1(0), h2(0), lazy(-1) {}
};struct QueryRes {ll h1, h2;int len;
};int n, m, k;
string s;
vector<ll> p1, p2, ones1, ones2;
vector<Node> seg;inline ll modmul(ll a, ll b, int mod) {return (a * b) % mod;
}void pull(int idx) {Node &cur = seg[idx];Node &L = seg[idx<<1];Node &R = seg[idx<<1|1];cur.len = L.len + R.len;cur.h1 = (L.h1 + modmul(R.h1, p1[L.len], MOD1)) % MOD1;cur.h2 = (L.h2 + modmul(R.h2, p2[L.len], MOD2)) % MOD2;
}void apply_set(int idx, int v) {seg[idx].lazy = v;seg[idx].h1 = modmul(v, ones1[seg[idx].len], MOD1);seg[idx].h2 = modmul(v, ones2[seg[idx].len], MOD2);
}void push(int idx) {if (seg[idx].lazy != -1 && seg[idx].len > 1) {apply_set(idx<<1, seg[idx].lazy);apply_set(idx<<1|1, seg[idx].lazy);seg[idx].lazy = -1;}
}void build(int idx, int l, int r) {seg[idx].lazy = -1;if (l == r) {seg[idx].len = 1;int v = s[l-1] - '0';seg[idx].h1 = v % MOD1;seg[idx].h2 = v % MOD2;return;}int mid = (l + r) >> 1;build(idx<<1, l, mid);build(idx<<1|1, mid+1, r);pull(idx);
}QueryRes qry(int idx, int l, int r, int ql, int qr) {if (ql <= l && r <= qr) {return {seg[idx].h1, seg[idx].h2, seg[idx].len};}push(idx);int mid = (l + r) >> 1;if (qr <= mid) return qry(idx<<1, l, mid, ql, qr);if (ql > mid) return qry(idx<<1|1, mid+1, r, ql, qr);QueryRes L = qry(idx<<1, l, mid, ql, qr);QueryRes R = qry(idx<<1|1, mid+1, r, ql, qr);int llen = L.len;ll nh1 = (L.h1 + modmul(R.h1, p1[llen], MOD1)) % MOD1;ll nh2 = (L.h2 + modmul(R.h2, p2[llen], MOD2)) % MOD2;return {nh1, nh2, L.len + R.len};
}void upd(int idx, int l, int r, int ql, int qr, int v) {if (ql <= l && r <= qr) {apply_set(idx, v);return;}push(idx);int mid = (l + r) >> 1;if (ql <= mid) upd(idx<<1, l, mid, ql, qr, v);if (qr > mid) upd(idx<<1|1, mid+1, r, ql, qr, v);pull(idx);
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);if (!(cin >> n >> m >> k)) return 0;cin >> s;int ops = m + k;p1.assign(n+5, 0);p2.assign(n+5, 0);ones1.assign(n+5, 0);ones2.assign(n+5, 0);p1[0] = 1; p2[0] = 1;for (int i = 1; i <= n; ++i) {p1[i] = (p1[i-1] * 1LL * BASE) % MOD1;p2[i] = (p2[i-1] * 1LL * BASE) % MOD2;}ones1[0] = 0; ones2[0] = 0;for (int i = 1; i <= n; ++i) {ones1[i] = (ones1[i-1] + p1[i-1]) % MOD1;ones2[i] = (ones2[i-1] + p2[i-1]) % MOD2;}seg.assign(4*(n+5), Node());build(1, 1, n);for (int i = 0; i < ops; ++i) {int t; cin >> t;if (t == 1) {int l, r, c; cin >> l >> r >> c;upd(1, 1, n, l, r, c);} else {int l, r, d; cin >> l >> r >> d;int len = r - l + 1;int L = len - d;if (L <= 0) {cout << "YES\n";continue;}QueryRes a = qry(1, 1, n, l, l + L - 1);QueryRes b = qry(1, 1, n, l + d, l + d + L - 1);if (a.h1 == b.h1 && a.h2 == b.h2) cout << "YES\n";else cout << "NO\n";}}return 0;
}

还有一个奇怪做法,因为memset和memcpy是1/64常数,所以...

图片


https://www.luogu.com.cn/problem/P8147

建立AC自动机,每个询问暴力跑出来所有匹配是一个暴力。

瓶颈在于求第k大。

所以二分答案,变为查询cnt>=k的有多少个,然后check

如果用树剖暴力维护的话不行,所以我们按照关键点集合建立虚树,虚树边上的cnt都一致,这个就可以维护了。

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

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

相关文章

玩转树莓派屏幕之五:自定义LCD屏幕显示

上一章节中已经完成了lvgl适配以及tslib的屏幕校准。自己要展示的内容还没有展示出来,还是使用玩转树莓派屏幕之二:自定义屏幕显示 中直接展示的文字,没有任何渲染。 lvgl中支持很多控件,屏幕展示的内容更加丰富。…

AtCoder ARC207 总结

AtCoder ARC207 总结 B 构造题。观察样例,发现 \(i\) 恰好三步到达 \(n-i\),其他点都是两步到达,这使我们想到 \(n\) 为偶数时的解法:分成 \(\le n/2\) 和 \(>n/2\) 的两部分点,对于其中一部分,我们让一个点恰…

工信部信息备案网站首页wordpress 多站点 合集

目录 前提&#xff1a;list 的基本介绍 一、构造/析构/拷贝/赋值 1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值 二、修改操作 1、push_back 2、insert 3、erase 4、clear 三、list iterator 的使用 1、operator * 2、operator 3、operator -- 4、operator &…

http长连接维护【yet】

http长连接维护【yet】。

2025.10.7模拟赛

赛时 唐完了 开题,看错T1,以为是可重边,然后推性质,发现假了 看一眼题目,没有可重边,是个红题,唐完了,然后写完1h15min已经过去了 T2想了几种转化,然后脑子不思考了 看到左右<=7,觉得只有部分的顺序会影响…

详细介绍:ZLG ZCANPro,ECU刷新,bug分享

详细介绍:ZLG ZCANPro,ECU刷新,bug分享pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

好好学习, 天天向上

纯粹的热爱世界, 对其多样性的好奇, 引发出无限的成长, 探索和学习, 让人变得强大

万网发布网站建网站需要什么软件

💡💡💡本文改进内容: token mixer被验证能够大幅度提升性能,但典型的token mixer为自注意力机制,推理耗时长,计算代价大,而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构 ,在保证性能的同时足够轻量化。 💡💡💡RIFormerBlock引入到YOLOv9,多个数…

副本(Replica)在Elasticsearch中扮演什么角色? - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

请问怎么做网站小城镇建设 网站官方

spring共四天 第一天&#xff1a;spring框架的概述以及spring中基于XML的IOC配置 第二天&#xff1a;spring中基于注解的IOC和ioc的案例 第三天&#xff1a;spring中的aop和基于XML以及注解的AOP配置 第四天&#xff1a;spring中的JdbcTemlate以及Spring事务控制 -------------…

瀑布流资源网站模板wordpress新建页面显示数据

一、插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴&#xff0c;但它的原理应该是最容易理解的了&#xff0c;因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排…

CentOS7关闭防火墙、Linux开启关闭防火墙 - 详解

CentOS7关闭防火墙、Linux开启关闭防火墙 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

鱼头seo软件张家界有实力seo优化费用

安装Elasticsearch 7.8.0 官网&#xff1a;Elasticsearch 7.8.0 | Elastic 大家下载所需要的安装包即可。然后解压缩&#xff1a; Elasticsearch是通过java编写的&#xff0c;所以自带jdk。多好&#xff0c;下载Elasticsearch赠送jdk 0.0&#xff0c;不过一般我们用自己的jdk…

OpenStack实验过程

用户与项目管理 创建用户与项目 cd ~ source keystonerc_admin # 应用需要的环境变量,获取权限以便后续操作 openstack project create cec # 创建项目 openstack user create --domain default --password openstack…

2025.10.7+7

2025.10.7 Week 笔记2025.10.7 Luogu P4145 很经典的题,记录区间的极值,如果 \(\max\) 为 \(1\),那么就不修改,因为 \(\sqrt{1} = 1\) 的,

樟木头网站推广栖霞酒店网站设计价格

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

MySQl accessed by ssh in win11

1.Open PowerShell via administrator role,then run to confirm whether the ssh has been installed in win11ssh -V 2.Access mysql via ssh, prerequisite you must configure mysql.exe path in system environm…

oppoR9m刷Linux系统:VCOM模式备份系统与基带IMEI/NVRAM/QCN

前言全局说明COM、VCOM、9008模式备份系统与基带IMEI/NVRAM/QCN注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。…

两个开源中国象棋引擎的编译

Debian 12, gcc 12. CCStockfish编译通过,运行时没有.nnue文件。文档声称可不用NNUE, ucioption.cpp里没有Use NNUE,不可能setoption 它 false.Pikafish,make build时自动先make net,从GitHub下载到了43MB的.nnue文…

php网站开发实用技术答案新乡网站建设设计

为什么需要使用泛型: 1):存储任意类型的数据在集合中 ,但是取出来都是Object类型的,此时就得强转.List list new ArrayList();list.add(1); //Interger类型Object ele list.get(0); //现在需要调用Interger类中的方法I nterger num (Interger) ele;System.out.println(num);…