2023年码蹄杯专科组第三场初赛 解题报告 | 珂学家

news2024/9/22 3:43:50

前言

在这里插入图片描述


题解

这是2023年第三场码蹄杯职业院校算法比赛,3D眩晕(字符串hash)挺有意思的。

这个系列赛,喜欢出典题。


3D眩晕

难度: 钻石

思路: 字符串hash

这题难在容错性上,就是允许有x次修改( x ≤ 3 x \le 3 x3),然后寻找等价的子数组个数。

这题使用字符串hash应该没有疑问,kmp/z函数在这边有点吃力。


当时光有string hash,也不行,那何如切入呢?

其实可以从x( x ≤ 3 x \le 3 x3)切入

把问题转化为

相同长度的串,寻找最早的不同点

这里有2种解法

  • 分治寻找

    分治递归寻找不同的点数

  • 二分寻找不同点

    第i次二分,寻找第i个不同点

因为个数有限,所以剪枝快速返回


这边给的解法是

  • 二分找不同点
#include <bits/stdc++.h>

using namespace std;

struct StringHash {
    StringHash(const std::string &s, int64_t p, int64_t mod)
        : s(s), p(p), mod(mod), pow(s.length() + 1), arr(s.length() + 1) {
        int n = s.length();
        pow[0] = 1l;
        for (int i = 0; i < n; i++) {
            pow[i + 1] = pow[i] * p % mod;
            arr[i + 1] = (arr[i] * p % mod + s[i]) % mod;
        }
    }
 
    int64_t query(int l, int r) {
        int64_t tmp = arr[r + 1] - arr[l] * pow[r - l + 1] % mod;
        return (tmp + mod) % mod;
    }

    string s;
    int64_t p;
    int64_t mod;
    vector<int64_t> pow;
    vector<int64_t> arr;
};

int main() {

    int t;
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin >> t;
    while (t-- > 0) {
        string s0, s;
        cin >> s0 >> s;

        int64_t p1 = 13l, p2 = 17l;
        int64_t mod = (int64_t)1e9 + 7;
        StringHash hp1(s0, p1, mod), hp2(s0, p2, mod);
        StringHash mp1(s, p1, mod), mp2(s, p2, mod);

        int res = 0;
        int n1 = s0.length(), n2 = s.length();
        for (int i = 0; i <= n1 - n2; i++) {
            // 统计不同的个数
            int s = i;
            for (int j = 0; s <= (i + n2) && j < 4; j++) {
                int l = s, r = i + n2 - 1;
                while (l <= r) {
                    int m = l + (r - l) / 2;
                    if (hp1.query(s, m) == mp1.query(s - i, m - i) && hp2.query(s, m) == mp2.query(s - i, m - i)) {
                        l = m + 1;
                    } else {
                        r = m - 1;
                    }
                }
                s = l + 1;
            }

            if (s > (i + n2)) {
                res++;
            }
        }
        cout << res << endl;
    }

    return 0;
}

写在最后

在这里插入图片描述

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

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

相关文章

NICE Seminar(2023-07-16)|演化算法的理论研究到底有什么用?(南京大学钱超教授)

模式定理&#xff08;Schema Theorem&#xff09; 模式定理&#xff08;Schema Theorem&#xff09;是遗传算法&#xff08;Genetic Algorithm, GA&#xff09;的重要理论基础&#xff0c;由约翰霍兰德&#xff08;John Holland&#xff09;在1975年提出。它描述了具有特定模式…

【机器学习】回归类算法-相关性分析

一、前言 前面的几篇博客我们学习了分类算法&#xff0c;今天我们来了解一下回归类的算法吧。首先我们来谈谈两者有什么区别&#xff0c;首先是我们在之前的分类算法&#xff0c;这类算法可以将让我们学会如何将不同的数据划分到不同的类里面&#xff0c;输出的是一些离散的值。…

新书速览|AI创意商业广告设计:Adobe Firefly + Photoshop

《AI创意商业广告设计:Adobe Fire.yPhotoshop》 本书内容 随着AI技术的出现&#xff0c;平面设计领域也出现了利用人工智能进行创作的程序&#xff0c;比如Firefly、Midjourney、 Stable Di.usion等。这些程序能够创作出高质量的设计作品。其中&#xff0c;Fire.y是由Adobe公司…

内网权限维持——创建影子账户

文章目录 一、RID简介二、修改RID进行权限维持 影子账户&#xff0c;顾名思义就是隐藏的用户&#xff0c;无法通过“计算机管理”或命令行查询&#xff0c;只能在注册表中找到其信息。下面的实验是在win 7上进行的。真正的影子账户其实是windwos RID 劫持。 一、RID简介 在wi…

线程池工具类 Executors源代码详解

​ 快捷导航 一、提供了什么功能&#xff1f;源码中的定义&#xff1a;此类支持以下几种方法&#xff1a; 二、源码中是怎么实现的&#xff1f;1、创建并返回一个配置了常用设置的ExecutorServicenewFixedThreadPool()newSingleThreadExecutor()newCachedThreadPool()newWorkS…

学习C#调用LazyCaptcha模块生成验证码的基本用法

LazyCaptcha是仿EasyCaptcha和SimpleCaptcha的.net开源图形验证码模块&#xff0c;其支持生成验证码及对应的静态图或动态图&#xff0c;还支持在图形中增加气泡、干扰线等噪音以提升图片自动识别难度。LazyCaptcha既能在B/S程序中使用&#xff08;本文的原由即Admin.NET中使用…

【数据结构初阶】深度理解 “栈” (附源码)

hello&#xff0c;又见面了&#xff01; 目录 1. 栈的概念与结构 2、栈的实现 Stack.h Stack.c test.c 3、习题 正文开始—— 1. 栈的概念与结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端…

小试牛刀-Telebot区块链游戏机器人(TS升级)

目录 1.编写目的 2.为什么使用TypeScript实现? 3.实现功能 3.1 AI图片生成 3.2 签到 3.3 邀请 3.4 WalletConnect连接 4.功能实现详解 4.1 AI图片生成 4.2 签到 4.3 邀请 4.4 WalletConnect连接 5.功能截图 ​6.问题整理 Welcome to Code Blocks blog 本篇文章主…

塑造美好心灵,激发创造活力|第三届瓷艺中华“陶溪川杯”儿童青少年陶瓷作品展开展

第三届瓷艺中华“陶溪川杯”儿童青少年陶瓷作品展 展览现场 由中央美术学院、景德镇陶瓷大学、景德镇陶文旅控股集团共同主办&#xff0c;由中国非物质文化遗产保护协会陶瓷分会、中国文化艺术发展促进会陶瓷专业委员会、中央美术学院陶瓷艺术研究院、中央美术学院少儿美术教…

无人机无刷电机技术详解及选型

1. 技术原理 无人机无刷电机&#xff08;Brushless DC Motor, BLDC&#xff09;是现代无人机动力系统的核心部件&#xff0c;其工作原理基于电磁感应和换向技术&#xff0c;实现了无需物理接触即可持续旋转的高效率动力输出。与传统有刷电机相比&#xff0c;无刷电机通过电子换…

你好! Git——如何进行多人协作

多人协作&#xff08;5&#xff09; 一、标签管理二、多人协作2.1 场景一&#xff08;这种方式不常见&#xff09;2.2 场景二&#xff08;常见&#xff09; 一、标签管理 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。 …

【给嵌入式新人的几条建议(共勉):三-C语言基础怎么补?】

给嵌入式新人的几条建议&#xff08;共勉&#xff09;&#xff1a;三-C语言基础怎么补&#xff1f; 前言1、先回答一个问题&#xff0c;对C语言的害怕到底在哪&#xff1f;&#xff08;纠正认知&#xff09;2、C语言基础&#xff0c;要补全部吗&#xff1f;No2.1 先看下自己属于…

深耕编程语言18年,对话 Rust、TypeScript、Nushell 核心贡献者 Sophia Turner | Open AGI Forum

作者 | Annie Xu 采访 | 卢威 责编 | Echo Tang 出品丨GOSIM 开源创新汇 编程语言的种类令人眼花缭乱&#xff0c;但成功的、常用的编程语言却是凤毛麟角。在深耕编程语言研发 18 年的 Sophia June Turner 看来&#xff0c;编程语言成功的关键在于其研发团队的透明度和机制建…

Azure OpenAI Embeddings vs OpenAI Embeddings

题意&#xff1a;Azure OpenAI 嵌入与 OpenAI 嵌入的比较 问题背景&#xff1a; Is anyone getting different results from Azure OpenAI embeddings deployment using text-embedding-ada-002 than the ones from OpenAI? Same text, same model, and the results are cons…

Learning vtkjs之Calculator

过滤器 公式计算器 Calculator 介绍 The Calculator filter is a fast way to add derived data arrays to a dataset. These arrays can be defined over points, cells, or just field data that is “uniform” across the dataset (i.e., constant over all of space). Va…

【小尘送书-第十六期】码农职场:IT人求职就业手册

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…

【JVM】垃圾回收机制、算法和垃圾回收器

什么是垃圾回收机制 为了让程序员更加专注于代码的实现&#xff0c;而不用过多的考虑内存释放的问题&#xff0c;所以在Java语言中&#xff0c;有了自动的垃圾回收机制&#xff0c;也是我们常常提及的GC(Garbage Collection) 有了这个垃圾回收机制之后&#xff0c;程序员只需…

华为路由常见 LSA 类型的产生及作用域和字段详细解读

华为路由常见 LSA 类型的产生及作用域 类型名称描述1路由器 LSA&#xff08;Router LSA&#xff09;每个设备都会产生&#xff0c;描述了设备的链路状态和开销。该 LSA 只能在接口所属的区域内泛洪2网络 LSA&#xff08;Network LSA&#xff09;由 DR 产生&#xff0c;描述该 …

在cPanelWHM中如何重置 MySQL 用户帐户密码

更改MySQL用户账户密码非常简单。服务器管理员可以在WHM中编辑任何MySQL用户的帐户。cPanel用户可以编辑其帐户管理的数据库的密码。 在WHM中更改MySQL用户帐户密码 打开WHM&#xff0c;在侧边菜单中的SQL服务下选择“Change MySQLUser Password”。Hostease的服务器产品提供稳…