2023牛客暑期多校训练营7 L.Misaka Mikoto‘s Dynamic KMP Problem(KMP))

news2024/11/20 7:15:00

文章目录

  • 题目大意
  • 题解
  • 参考代码

题目大意

官方

题解

注意 ∑ ∣ t ∣ ≤ 2 ∗ 1 0 6 \sum{|t|} \leq 2*10^6 t2106
对于每一组操作 2 2 2 我们发现可以用 k m p kmp kmp 处理,复杂度为 2 ∗ ∣ s ∣ 2*|s| 2s
明显的,当 s i z t < s i z s siz_t <siz_s sizt<sizs 时,不存在出现的次数,答案为 0 0 0
筛掉了一部分的 t t t ,复杂度最多为 O ( 2 ∗ ∣ s ∣ ∗ ( 2 ∗ 1 0 6 / ∣ s ∣ ) ) O(2*|s|*(2*10^6/|s|)) O(2s(2106/∣s)) ,即 O ( 4 ∗ 1 0 6 ) O(4*10^6) O(4106)
所以,跑裸的 k m p kmp kmp 统计长度和个数即可。

参考代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int s,m,b,p,ans,c;
long long z;
int f[N];
int g[N];
int nxt[N];
signed main()
{
    cin>>s>>m>>b>>p;
    for(int i=1;i<=s;i++)
        scanf("%lld",&f[i]);
    c=1;
    for(int k=1;k<=m;k++)
    {
        int op;
        scanf("%lld",&op);
        if(op==1)
        {
            int x,c;
            scanf("%lld%lld",&x,&c);
            x=(x^z)%(s)+1;             //强制在线操作
            c=c^z;
            f[x]=c;
//             cout<<"1"<<endl;
//             cout<<x<<" "<<c<<endl;
        }
        else
        {
            c=1ll*c*b%p;
            int n,x=0,y=0;
            scanf("%lld",&n);
            for(int i=1;i<=n;i++)
            {
                int a;
                scanf("%lld",&a);
                g[i]=a^z;
//                 cout<<g[i]<<" ";
            }
//             puts("");
            if(n<s)
            {
                z=0;
                continue;
            }
            int k=0;
            nxt[1]=0;
            for(int i=2;i<=s;i++)            //kmp
            {
                while(f[k+1]!=f[i] && k!=0)
                    k=nxt[k];
                if(f[k+1]==f[i])
                    k++;
                nxt[i]=k;
            }
            k=0;
            for(int i=1;i<=n;i++)
            {
                while(f[k+1]!=g[i] && k!=0)
                    k=nxt[k];
                if(f[k+1]==g[i])
                    k++;
                if(k==s)
                {
                    x++;                  //更新个数
                    if(i==n)
                        break;
                    k=nxt[k];
                }
//                 cout<<k<<endl;
            }
            k=nxt[s];            //r
            z=x*k;
//             cout<<x<<" "<<k<<endl;
//             cout<<z<<" "<<"z"<<endl; 
            ans=(1ll*ans+1ll*k*x%p*c%p)%p;              //计算答案
        }
    }
    printf("%lld\n",ans);
}

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

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

相关文章

Arcgis将一个shp依照属性表导出为多个shp

# -*- coding:utf-8 -*-import arcpy import osfrom arcpy import env#env.workspace "./" #自己设置路径shp rC:\Users\Administrator\Desktop\Lake\xxx.shp #shp文件路径outpath r"C:\Users\Administrator\Desktop\Lake\fenli" #输出结果路径with arc…

灰度均衡变换之c++实现(qt + 不调包)

1.基本原理 灰度均衡是以累计分布函数变换为基础的直方图修正法&#xff0c;它可以产生一副灰度级分布概率均匀的图像。也就是说&#xff0c;经过灰度均衡后的图像在没一级灰度上像素点的数量相差不大。公式见下图&#xff0c;为灰度值为x的像素点的个数&#xff0c;n为总像素点…

【vue3-element-admin】ESLint+Prettier+Stylelint+EditorConfig 约束和统一前端代码

前言 本文介绍 vue3-element-admin 如何通过ESLint 检测 JS/TS 代码、Prettier 格式化代码、Stylelint 检测 CSS/SCSS 代码和配置 EditorConfig 来全方位约束和统一前端代码规范。 ESLint 代码检测 ESLint 可组装的JavaScript和JSX检查工具&#xff0c;目标是保证代码的一致…

CXL 预备知识:MESI 协议介绍

&#x1f525;点击查看精选 CXL 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

Redis—持久化

这里写目录标题 AOF三种写回策略写回策略的优缺点AOF 重写机制AOF后台重写AOF优缺点使用命令 RDBRDB 持久化的工作原理执行快照时&#xff0c;数据能被修改吗RDB 持久化的优点RDB 持久化的缺点 混合持久化大key对持久化的影响 AOF 保存写操作命令到日志的持久化方式&#xff0…

Codeforces-Round-891-Div-3

Codeforces Round 891 (Div. 3) A. Array Coloring 题目 给你一个由 n n n个整数组成的数组。您的任务是确定是否可以将其所有元素着色为两种颜色&#xff0c;使得两种颜色的元素之和具有相同的奇偶性&#xff0c;并且每种颜色至少有一个元素着色。 例如&#xff0c;如果数…

ArcGIS Pro应用—暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用全流程科研能力提升教程

详情点击链接&#xff1a;ArcGIS Pro应用—暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用全流程科研能力提升教程 第一&#xff1a;GIS及ArcGIS Pro 1.GIS基本原理及常用软件 2.ArcGIS Pro 安装与配置 3.ArcGIS Pro 3.0 的新…

Detecting Everything in the Open World: Towards Universal Object Detection

1. 论文简介 论文题目《Detecting Everything in the Open World: Towards Universal Object Detection》发表情况&#xff0c;CVPR2023[论文地址][https://arxiv.org/pdf/2303.11749.pdf][代码地址][https://github.com/zhenyuw16/UniDetector] 2.背景与摘要 本文旨在解决通…

面试热题(岛屿数量)

给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网格的四条边均…

关于三次握手和四次挥手,面试官到底想听到怎样的回答?

我一看到 TCP&#xff0c;啪就点进来了&#xff0c;很快啊。 TCP报文 一个完整的 TCP 报文头部共有 20 个字节&#xff0c;其中包括&#xff1a; 源端口号&#xff08;16位&#xff09;和目的端口号&#xff08;16位&#xff09;&#xff1a;再加上 ip 首部的源 ip 地址和目…

canvas实现代码雨

学习抖音&#xff1a; 渡一前端必修课 效果图&#xff1a; 全部代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&…

实现 Notification 通知

如图这种效果 可以使用 Notification API来进行实现 代码如下 注意&#xff1a;一定要用服务端打开。不然不会弹出来。vscode可以安装 live Serve 插件服务端打开 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8">…

git-指令

1.名称和邮箱 git config --global user.name test git config --global user.email testatguigu.com 这里的--global表示全局配置&#xff0c;后续的所有文件操作都会使用该用户名称及邮箱。此时在操作系统的用户目录C:\Users\Administrator&#xff0c;会产生新的配置文件.gi…

【Python】基础:标准库常用模块

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍标准库常用模块。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#…

什么是Milvus

原文出处&#xff1a;https://www.yii666.com/blog/393941.html 什么是Milvus Milvus 是一款云原生向量数据库&#xff0c;它具备高可用、高性能、易拓展的特点&#xff0c;用于海量向量数据的实时召回。 Milvus 基于 FAISS、Annoy、HNSW 等向量搜索库构建&#xff0c;核心是…

开发工具Eclipse的使用

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Eclipse使用的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Eclipse是什么 二.使用Eclipse的…

OLED透明屏选购指南:性能、品牌与预算的平衡

引言&#xff1a;OLED透明屏作为一种创新的显示技术&#xff0c;正在迅速发展并广泛应用于各个领域。 然而&#xff0c;面对市场上琳琅满目的OLED透明屏产品&#xff0c;如何选择适合自己需求的高品质产品成为了采购者们的重要任务。 对此&#xff0c;尼伽将为您提供一份OLED…

webshell链接工具-Behinder(冰蝎)

“冰蝎”动态二进制加密网站管理客户端 项目地址&#xff1a; https://github.com/rebeyond/Behinder

大模型“瘦身”进手机 下一个iPhone时刻将至?

一股“端侧大模型”浪潮正在涌来。华为、高通等芯片巨头正探索将AI大模型植入端侧&#xff0c;让手机实现新一代物种进化。 相比ChatGPT、Midjourney等AI应用依赖云端服务器提供服务&#xff0c;端侧大模型主打在本地实现智能化。它的优势在于能够更好地保护隐私&#xff0c;同…

以太网UDP协议(十一)

目录 一、端口号 二、UDP 一、端口号 端口号&#xff0c;用来识别同一台计算机中进行通信的不同应用程序&#xff0c;也别成为程序地址。 备注&#xff1a;端口号由其使用的传输层协议决定。因此&#xff0c;不同的传输协议可以使用相同的端口号。即TCP和UDP可以同时使用相同…