CF 7D: Palindrome Degree

S/4中的16种特殊库存类型 阅读详情

题目链接:http://codeforces.com/contest/7/problem/D


题意:

“等级”的定义是,

每个串(包括空串)的等级至少为0,

若一个长度为len的前缀是回文串,

且它的长度为floor(len/2)的前缀和后缀的“等级”为k,

则它的等级是k+1。

求一个字符串所有前缀的“等级”和。


算法:

我是用manacher算法求的回文串。

manacher算法的介绍很多,比如这个:http://twocoldzcainiao.sinaapp.com/?p=238

简单来说,manacher算法是把原字符串映射成一个'*'和字符交替的新字符串,

从而把所有的回文串映射成新串中一个长度为奇数的字符串。

因此可以在O(n)时间内处理出以每个字符为中心可以延伸出多长的回文串。


对于本题,

对于每一个前缀,直接找出它的中心,

注意,这个中心可能是字符也可能是"*",

通过这个中心延伸的回文串长度判断这个前缀是不是回文串。

如果是的话,找到这个回文串的中心字符,也就是s[(i-1)/2],就可以递推求出等级。


当然这道题也可以用hash做,

推荐一个写的比较清爽的代码:

http://codeforces.com/contest/7/submission/3995867

不过据专业人士称这个代码的质数取的太小。。


代码如下:

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<set>
#include<map>
#define INF 0x3f3f3f3f
using namespace std;

const int MAXN=5100000;
char s[MAXN<<1];
int p[MAXN<<1];
int rank[MAXN];

int main()
{
    while(~scanf("%s",s))
    {
        int n=strlen(s);
        s[2*n+2]='\0';
        for(int i=n-1; i>=0; i--)
        {
            s[2*i+2]=s[i];
            s[2*i+3]='*';
        }
        s[0]='$';
        s[1]='*';
        memset(p,0,sizeof(p));
        int maxn=0,maxi=0;
        long long ans=0LL;
        for(int i=1; i<2*n+2; i++)
        {
            p[i]=maxn>i?min(p[2*maxi-i],maxn-i):1;
            while(s[i+p[i]]==s[i-p[i]])p[i]++;
            if(maxn<i+p[i])
            {
                maxn=i+p[i];
                maxi=i;
            }
        }
        memset(rank,0,sizeof(rank));
        for(int i=0; i<n; i++)
        {
            if(p[i+2]!=i+2)
            {
                rank[i]=0;
            }
            else
            {
                if(i)
                {
                    rank[i]=rank[(i-1)/2]+1;
                }
                rank[i]=max(rank[i],1);
            }
            ans+=rank[i];
        }
        printf("%I64d\n",ans);
    }
    return 0;
}


计算机实战分享3:森林火灾预测分析可视化机器学习预测-完整数据代码-可直接运行 阅读详情

相关推荐

C# 死锁:原理、诊断与解决方案深度解析

本文深入探讨了C#中的死锁问题,详细介绍了死锁的基本概念、形成机制、常见场景、诊断方法及解决方案。死锁通常发生在多线程环境下,当多个线程因争夺资源而互相等待时,导致程序无法继续执行。文章通过代码示例展示了常见的死锁场景,如锁的嵌套、同步上下文死锁和线程池死锁,并提供了使用Visual Studio、WinDbg等工具进行死锁诊断的方法。此外,文章还提出了多种预防和解决死锁的策略,包括保持锁顺序一致性、使用锁超时机制、避免同步阻塞异步代码以及使用更高级的同步原语。通过这些方法,开发者可以有效减少死锁的发生,提

记录学习的过程 1407

CF7D-Palindrome Degree【字符串hash,dp】

正题 luogu链接:https://www.luogu.org/problemnew/show/CF7D 题目大意 定义kkk级回文串为一个字符串的(1,⌊n/2⌋)(1,\lfloor n/2 \rfloor)(1,⌊n/2⌋)和(n−⌊n/2⌋,n)(n-\lfloor n/2 \rfloor,n)(n−⌊n/2⌋,n)都是k−1k-1k−1级回文串。 求这个字符的所有前缀的回文串等级和。...

QuantAsk 420

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输至原子云

本文详细介绍了如何使用立创·庐山派-K230-CanMV开发板,通过ATK-ESP8266 WIFI模块实现图像识别数据的无线传输至原子云平台。内容包括硬件连接、软件环境搭建、AT指令控制、原子云连接及数据上传的全过程,并提供了实用的调试技巧和常见问题解决方案,为物联网应用开发提供了完整实践指南。

potato的博客 743

Codeforces Beta Round #7--D. Palindrome Degree(hash)

D. Palindrome Degree time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output String s of length n is called k-pali

随风的专栏 1629

深入解析SSD报错“READ FPDMA QUEUED”:从诊断到修复全流程

本文深入解析了SSD报错“READ FPDMA QUEUED”的含义、成因与全流程解决方案。该错误通常指示硬盘硬件或健康状态问题。文章详细介绍了如何通过系统日志定位错误、解读关键的S.M.A.R.T.健康报告(重点关注重分配扇区计数等指标),并逐步进行硬件排查(如更换SATA数据线)、软件修复与数据抢救,最终指导用户根据诊断结果做出维修或更换SSD的决策。

weixin_29233333的博客 400

保姆级教程:在Windows上用Python+OpenCV调用海康工业相机(附MVS配置避坑指南)

本文提供了一份详细的Windows环境下使用Python和OpenCV调用海康工业相机的保姆级教程,涵盖MVS配置避坑、相机连接、图像获取与格式转换等关键步骤。特别针对工业相机取流中的常见问题,如独占访问控制和多相机协同工作,提供了实用解决方案,帮助开发者快速实现稳定的图像采集系统。

weixin_29228781的博客 400

Codeforces7 D. Palindrome Degree(hash+dp)

题意: 给定字符串,一个(k-回文串)s定义为: s串是回文串,且s[1,n/2]是((k-1)-回文串) (非回文串是(0-回文串)) 要求计算出给定字符串所有前缀的k,并输出他们的k的和 数据范围:n<=5e6 解法: 令d[i]表示s[1,i]的k值 显然d[i]=d[n/2]+1,需要满足s[1,n/2]与s[i-n/2+1,i]互为反串 正向负向都预处理一个hash就能快速判断是否是反串了 code: #include<bits/stdc++.h> using namespac

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 325

yolov8 转华为昇腾om脚本

yolov8 转华为昇腾om脚本

jacke121的专栏 1602

Codeforces Beta Round #7--D. Palindrome Degree(Manacer)

题目:http://blog.youkuaiyun.com/winddreams/article/details/44218961 求出每个点为中心的最长字符串,判断该串是不是从开头的回文串。   #include #include #include using namespace std ; int p[12000000] , dp[6000000]; char s[12000000]

随风的专栏 1000

华为OD机试真题 新系统 2026-07-22 Java&Go&C 实现【最小代价完成论文评审】

某校有 n 篇论文需要分配给教师评审。 每篇论文 i 可由 files[i] 对应的教师列表中任一教师评审。 每篇论文至少需要一名教师评审。 每位教师 t 不论被分配多少篇论文,其评审费用固定为 cost[t]。 请给出参与评审教师数量最少时的总费用。 如果存在多种方案满足教师数量最少,则选择总费用最小的方案。

MISAYAONE的博客 151

v86.01 鸿蒙内核源码分析 (静态分配篇) | 很简单的一位小朋友 | 百篇博客分析 OpenHarmony 源码

相比动态分配,静态内存池的分配就是个小弟弟,非常的简单,两个结构体 + 一张图 就能说明白。

日拱一卒,力出一孔 775

Codeforces Beta Round #7 D. Palindrome Degree —— hash

题目链接:http://codeforces.com/contest/7/problem/D D. Palindrome Degree time limit per test 1 second memory limit per test 256 megabytes input standard input output standa

A man can be destroyed, but not defeated. 917

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现

本文提出了一种基于YOLOv8深度学习的涂胶缺陷检测系统,针对断胶、溢胶、缺胶、气泡及胶条宽度异常等常见缺陷类型,实现了从数据采集到模型部署的完整解决方案。系统采用工业相机采集涂胶图像,通过多形态数据增强策略解决样本稀缺问题,利用YOLOv8框架实现高效检测。相比传统人工目检和规则式机器视觉方法,该系统在检测精度(mAP达97.5%)和实时性(单图检测耗时0.038秒)方面表现优异,可满足智能制造场景下的涂胶质量检测需求。

huanghm88的专栏 274

[数据结构-hash]CF 7D Palindrome Degree

D. Palindrome Degree time limit per test 1 second String s of length n is called k-palindrome, if it is a palind

lastone的专栏 583

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【CF】7 Beta Round D. Palindrome Degree

manacher+dp.其实理解manacher就可以解了,大水题,dp就是dp[i]=dp[i>>1]+1如何满足k-palindrome条件。 1 /* 7D */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <...

weixin_33726943的博客 97

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[luogu] CF7D Palindrome Degree 字符串hash+dp

前言 怎么字符串hash 这么难啊(一堆hash公式)QAQ 代码借鉴 : https://www.luogu.com.cn/blog/yhttcr/solution-cf7d 传送门 : https://www.luogu.com.cn/problem/CF7D 思路 题目很简单明了 操作无非就两步 判断子串是否回文 dp处理所有前缀之和 第二步按题意来非常简单 但是第一步,字符串hash没看懂 从 https://oi-wiki.org/string/hash/#_4入的hash 到https:

qq_34364611的博客 173

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

codeforces7D Palindrome Degree(manacher&dp或Hsh&dp)

D. Palindrome Degree time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output String s of length n is called k-pali

记录成长的点点滴滴. . . . . 1767

Palindrome Degree(hash的思想题)

个人心得:这题就是要确定是否为回文串,朴素算法会超时,所以想到用哈希,哈希从左到右和从右到左的key值一样就一定是回文串, 那么问题来了,正向还能保证一遍遍历,逆向呢,卡住我了,后面发现网上大神的秦九韶算法用上了,厉害了。 关于哈希,这题用的是最简单的哈希思想,就是用M取合理的素数,这题取得是3, 然后正向就是 a+=a*M+ch[i]。逆向用秦九韶可以在循环的时候算出来, 举个例子比如三...

weixin_30344795的博客 173

CodeForces - 7D Palindrome Degree【字符串hash】【dp】

【题目描述】 String s of length n is called k-palindrome, if it is a palindrome itself, and its prefix and suffix of length are (k - 1)-palindromes. By definition, any string (even empty) is 0-palindrome. ...

inv0ker的博客 392

codeforces D. Palindrome Degree(hash)

开始使用Palindromic Characteristics的方式来计算dp(i,j)的回文度,然后统计dp所有(0,j)提示空间超过限制。因为是需要计算所有前缀的回文度之和。由于回文度关系有dp(i) = 1+dp(i/2),如果s[0..i]是回文串。分别计算从0到i和从i到0的哈希值,如果两个哈希值相等,说明是回文串,就用上面的回文度关系。 代码参考: https://github.com/wuli2496/OJ/blob/master/codeforces/D%20Palindrome%20D

多看多听多总结 427

Palindrome Degree(CodeForces 7D)—— hash求回文

  学了kmp之后又学了hash来搞字符串。这东西很巧妙,且听娓娓道来。   这题的题意是:一个字符串如果是回文的,那么k值加1,如果前一半的串也是回文,k值再加1,以此类推,算出其k值。打个比方abaaba,k值为3,abaxxaba,k值为1。现在,给出一个串,让你求这个串的所有前缀(包括本身)的k值的和。   如果考虑马拉车,那么先预处理出每个地方的最长回文长度,然后不断的截断...

ddmxynl793173的博客 243

CODEFORCES 501E Misha and Palindrome Degree <回文串 + 构成回文串的种数>

传送门:http://codeforces.com/problemset/problem/501/E 题意:给你n个数字a0,a2,...,an-1。(1 分析:列举每种可能匹配的情况,分奇偶,注意中间位置 考虑周全就行了。。。。。代码如下: #include using namespace std; const int maxn = 100005; int a[maxn],b[max

论菜鸟的自我修养。。。 911

codeforces 7D Palindrome Degree

题目链接:http://codeforces.com/problemset/problem/7/D 题意:(1)任何串(包括空串)都是0-回文; (2)一个长度为n的回文串,若它的前n/2个字符和后n/2个字符都是(k-1)-回文,则它是k-回文。现给定一个串,设它的前缀分别是x-回文,求所有这些x值的和。 比如: abacaba 前缀                    x a  

Yedl的专栏 1128

Misha and Palindrome Degree

Misha and Palindrome Degree 题目链接:http://codeforces.com/problemset/problem/501/E 贪心 如果区间[L,R]满足条件,那么区间[L',R'](L'<=L,R<=R')必然满足条件,所以只需要找到满足条件的最小区间即可。首先去除两边相同的区间,剩下的区间为[l,r],因为区间[l,r]的两端不相同,所以要找...

weixin_34018169的博客 154

CodeForces 501 E.Misha and Palindrome Degree(组合数学)

Description 给出一个长度为nn的序列aia_i,定义该序列的回文度为区间(l,r)(l,r)的对数,其中l,rl,r需要满足1≤l≤r≤n1\le l\le r\le n且对al,...,ara_l,...,a_r重排之后该序列是回文序列 Input 第一行为一整数nn表示序列长度,之后输入nn个整数aia_i表示该序列(1≤n≤105,1≤ai≤n)(1\le n\le 10^

ZSQ 601

Codeforce 7D Palindrome Degree

Manacher+递推  裸题。。。 #include #include #include #include #include #include #include using namespace std; #define N 5000010 int n,p[N*2],Dp[N]; char S[N*2]; long long Ans; void Manacher() {

三叶的专栏 725
上一篇: SOJ 1091: 指环王
下一篇: 【转】 一些图论、网络流入门题总结、汇总
frog1902
博客等级 码龄14年 152粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值