字符串哈希 +二分

news2024/9/28 19:16:05

前言:之前纠结了很久的字符串哈希原来是有结论的

注意我们的数组一定要开long long


在这里插入图片描述
在这里插入图片描述
我们来看一下题目

在这里插入图片描述

这个题目我们可以用二分 + 哈希来做,我们要先验证一下二分的可行性,我们如果找到一个不符合的1 - i ,那么不可能存在一个j ( j > i )使得 1 - j 成立

#include<bits/stdc++.h>
using namespace std;

#define int long long
const int N = (int)1e6+5;
const int P = 233;
const int Mod = 998244353;
string s;
int n;

int p[N], h[N];

void ini() {
    p[0] = 1, h[0] = 0;
    for(int i = 1; i <= n; i++) {
        p[i] = p[i-1] * P % Mod;
        h[i] = (h[i-1] * P % Mod + s[i]) % Mod;
    }
}

int get(int l, int r) {
    return ((h[r] - h[l-1] * p[r-l+1] % Mod) % Mod + Mod) % Mod;
}

bool check(int len, int val) {
    for(int i = 2; i <= (n-len); i++) {  // 从 i=1 开始
        if(get(i, i+len-1) == val) {
        	//cout << "在 " << i << endl;
        	return true;
		}
    }
    return false;
}

signed main() {
    cin >> s; 
	n = s.size(); s = ' ' + s;
    ini();
    vector<int> a;
    for(int i = 1; i <= n-2; i++) {
        if(get(1, i) == get(n-i+1, n)) {
            a.push_back(i);
        }
    }
    int l = -1, r = a.size();
    int ans = 0;
	
    while(l + 1 < r) {  // 恢复二分查找
        int mid = (l + r) >> 1;
        int u = a[mid];
        if(check(u, get(1, u))) {
            l = mid;
            ans = u;
            //cout << " 答案有 " << u << endl;
        } else {
            r = mid;
        }
    }
    if(ans > 0) {
        cout << s.substr(1, ans);
    } else {
        cout << "Just a legend";
    }
    return 0;
}

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

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

相关文章

超声波清洗机哪个牌子的好?四大热销超声波清洗机款式硬核详评

夏天出汗多&#xff0c;眼镜、首饰、手表等随身佩戴的小物件常常被汗渍“侵蚀”。佩戴一段时间后&#xff0c;这些饰品容易积聚污垢&#xff0c;而且难以彻底清洁。不过&#xff0c;只需花费一两百元购买一台超声波清洗机&#xff0c;就能轻松解决这些问题。不仅能清洗眼镜&…

控标可编程带POE交换机中控系统的优势及应用领域

控标可编程带POE交换机中控系统是一种集成了控制、编程、数据交换及电力传输功能的综合性系统。以下是对其功能的详细描述及应用领域的探讨&#xff1a; 功能描述 可编程控制&#xff1a; 该系统具备强大的可编程能力&#xff0c;允许用户根据实际需求编写控制程序&#xff0…

杰里AC695X之自定义提示音

1.配置工具 在SDK\cpu\br23\tools\AC695X_config_tool打开配置工具 2.添加提示音 这里时初始的提示音文件和音频路径 将要添加的提示音文件添加到SDK\cpu\br25\tools\soundbox\standard\提示音中&#xff0c; 点击添加提示音&#xff0c;选择路径&#xff0c;取提示音名字 最…

(来点有趣的)IDEA设置背景图片

文章目录 1、点击工具栏上的“File”选项&#xff0c;然后选择“Settings”2、在“Settings”窗口中&#xff0c;选择“Appearance & Behavior > Appearance”。在“Appearance”下点击“Background Image”弹出设置背景3、设置好以后点击“ok”即可&#xff0c;以下是效…

App推广利器:Xinstall无广告码安装全解析

在移动互联网时代&#xff0c;App推广已成为企业营销的重要一环。然而&#xff0c;传统的App推广方式往往依赖于繁琐的广告码&#xff0c;不仅降低了用户体验&#xff0c;还增加了推广难度。如今&#xff0c;随着Xinstall的强势崛起&#xff0c;这一难题终于得到了有效解决。 …

生产分析报表做到什么效果才叫好?看这一篇就知道

什么是生产分析报表&#xff1f; 传统的生产分析报表&#xff0c;主要是以文档的形式来记录和分析生产活动&#xff0c;例如&#xff1a; 图源网络 这样的报表虽然可以涵盖生产的各个方面&#xff0c;但主要依赖于手工录入数据&#xff0c;因此数据整合难度较大&#xff0c;易…

趋动科技 OrionX on VMware 打造 AI 就绪平台

着科技进步和产业变革的加速演进&#xff0c;人工智能&#xff08;AI&#xff09;已经成为兵家必争之地。今年以来伴随着ChatGPT带来的鲶鱼效应&#xff0c;人工智能成为科技产业创新的焦点&#xff0c;其应用范围越来越广泛&#xff0c;并将持续发展。科技产业龙头正加大在人工…

前端宝典十四:Node缓存、安全与鉴权

本文主要从Node缓存、安全与鉴权几个方面展开解析&#xff0c;包含几个方面&#xff1a; Cookie 定义、设置、生命周期以及安全性Node缓存分类和区别Node鉴权包含session、cookie、token、jwt等 一、Cookie HTTP Cookie&#xff08;通常也叫 Web Cookie 或浏览器 Cookie&…

node.js express创建本地服务以及使用pm2启动服务

在node.js环境下安装插件&#xff1a; npm i body-parser npm i express 同目录下创建app.js // 引入express中间件 const express require(express); const bodyParser require(body-parser); // 创建web服务器 const app express(); // 使用body-parser中间件解析JSON类型…

对于mp4 android可以正常播放 ios和mac safari不能播放问题处理

直接对原mp4文件进行重新转码就可以了 ffmpeg -i origin.mp4 -vcodec h264 -profile:v high -level 4.1 orgin_hl.mp4 原因源文件不符合苹果基本规则苹果官网文档

在SOLIDWORKS中改善放样的3个要点

在SolidWorks中&#xff0c;“放样”和“扫描”特征是以特征操作复杂和控制艰难而闻名的。通常需要进行精确的选择和仔细的草图管理才能获得最准确并美观的结果。在本文中&#xff0c;我们将向您展示三个简单的技巧&#xff0c;使您的放样特征更上一层楼&#xff0c;同时避免出…

docker映射了端口,宿主机不生效

1、问题产生原因 docker run -d --name my-redis -p 6379:6379 -v /usr/redis.conf:/usr/local/etc/redis/redis.conf team-redis:3.2 redis-server /usr/local/etc/redis/redis.conf 这容器跑起来了&#xff0c;端口6379没用。搞的我一直怀疑哪里出错了&#xff0c;查看配置…

第一篇计算机领域顶会文章怎么发,Best Paper Award其实很简单?

标题&#xff1a;第一篇计算机领域顶会文章怎么发&#xff0c;Best Paper Award其实很简单&#xff1f;&#xff01; 开头&#xff1a; 计算机顶会&#xff0c;即计算机领域的顶级学术会议&#xff0c;是指在计算机科学及其相关领域内具有极高学术水平和广泛影响力的国际会议…

Web应用加密数据传输方案

目录 概述 最初的方案 改进后的方案 秘钥的过期时间 概述 介于公司最近发布了一个面向C端用户的Web系统&#xff0c;为防止前端调用后端的API接口时&#xff0c;数据传输的内容轻易的被黑客获取&#xff0c;而设计的一个前后端数据加密传输方案 最初的方案 在最开始&#xf…

什么是数据分析,企业数据分析的流程是什么?

“有数据、有准确数据的企业在商业市场中能打败50%的同行&#xff1b; 而能根据数据进行揭示过去、预测未来、优化流程的企业&#xff0c;在商业市场中能打败99%的同行&#xff01;“ 那么&#xff0c;企业到底应该如何开展数据分析工作呢&#xff1f;这篇从基本概念讲起&#…

【html+css 绚丽Loading】 000014 三元波动盘

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

C++模拟实现priority_queue(优先级队列)

一、priority_queue的函数接口 从上图我们可以看出&#xff0c; priority_queue也是一个容器适配器&#xff0c;我们使用vector容器来模拟实现priority_queue。 namespace bit{#include<vector>#include<functional>template <class T, class Container vector…

Unity教程(十二)视差背景

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

生命科学与医学类专业数据库有哪些

一、Cell Press Cell Press的期刊是生物工程科学方面权威的学术期刊&#xff0c;影响因子一直名列前茅&#xff0c;在生物、医学研究领域享有很高声誉&#xff0c;是公认的了解生物医学最新学术成果的必读文献。可通过Elsevier的ScienceDirect平台访问全文。 二、中华医学期刊…

黑神话:悟空,第一回合boss位置详解大全!

《黑神话&#xff1a;悟空》是一款以中国经典神话为背景的动作角色扮演游戏&#xff0c;玩家将在游戏中扮演齐天大圣孙悟空&#xff0c;经历一系列惊心动魄的冒险和战斗。在游戏的第一章节中&#xff0c;玩家将会遇到各种强大的BOSS&#xff0c;击败它们不仅可以顺利通关&#…