HDU - 4426 Palindromic Substring

嵌入式工程师成长之路(7)——算法学习 算法大全1、风仲达——算法笔记2、坐在马桶上学算法3、啊哈算法4、深度强化学习实验室。 阅读详情

题目:a-z都表示一个0~25的整数,一个长度为len的回文串的价值由前(len+1)/2个字符组成的26进制整数表示,

给出一个字符串,询问第k小的回文子串的价值

思路:保存一下节点的价值

代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<ctime>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a > 0 ? a : -a; }
template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f

const LL MOD=777777777;
const int MAXN = 100005, SIZE = 26;
LL score[20][MAXN],pow26[MAXN],num[20][26];
LL ask[20];
char str[MAXN];
int n,m;
struct Palindromic_Tree {
	int next[MAXN][SIZE];//next指针
	int fail[MAXN];//fail指针
	LL cnt[MAXN];
	int len[MAXN];//len[i]表示节点i表示的回文串的长度
	int S[MAXN];//存放添加的字符 S[MAXN << 1]
	int last;//指向上一个字符所在的节点,方便下一次add
	int n;//字符数组指针 //lbd, rbd
	int p;//节点指针
	int NewNode(int l) {//新建节点
		for(int i = 0; i < SIZE; ++i)
			next[p][i] = 0;
		cnt[p] = 0;
		len[p] = l;
		return p++;
	}
	void Init(/*int x*/) {//初始化
		p = n = 0;
		NewNode(0); NewNode(-1);
		last = 0;
		S[n] = -1;
		fail[0] = 1;
		mm(score[0],0);
		mm(score[1],0);
	}
	int GetFail(int x/*, int d*/) {//和KMP一样,失配后找一个尽量最长的
		while(S[n - len[x] - 1] != S[n]) x = fail[x];
		return x;
	}
	void Add(int c/*, int d*/) {//d=0表示在首部添加字符,d=1表示在尾部添加字符
		S[++n] = c;
		int cur = GetFail(last);//通过上一个回文串找这个回文串的匹配位置
		if(!next[cur][c]) {//如果这个回文串没有出现过,说明出现了一个新的本质不同的回文串
			int now = NewNode(len[cur] + 2);//新建节点
			fail[now] = next[GetFail(fail[cur]/*, d*/)][c];//和AC自动机一样建立fail指针,以便失配后跳转
			next[cur][c] = now;
			for(int i=0;i<m;i++)
                score[i][now]=(score[i][cur]+pow26[(len[now]-1)/2]*num[i][c]%MOD)%MOD;
		}
		last = next[cur][c];
		cnt[last]++;
	}
	void Count() {
		for(int i = p - 1; i >= 0; --i)
			cnt[fail[i]] += cnt[i];
	}
}tree;
int ans[MAXN],now;
bool cmp(int x,int y){
    return score[now][x]<score[now][y];
}
void solve(){
    int sz=tree.p;
    for(int i=0;i<m;i++){
        now=i;
        for(int j=2;j<sz;j++)
            ans[j]=j;
        sort(ans+2,ans+sz,cmp);
        for(int j=2;j<sz;j++){
            if(ask[i]>tree.cnt[ans[j]])
                ask[i]-=tree.cnt[ans[j]];
            else{
                printf("%lld\n",score[i][ans[j]]);
                break;
            }
        }
    }
}
int main(){

    int T;
    pow26[0]=1;
    for(int i=1;i<MAXN;i++)
        pow26[i]=pow26[i-1]*26%MOD;
    scanf("%d",&T);
    while(T--){
        tree.Init();
        scanf("%d%d",&n,&m);
        scanf("%s",str);
        for(int i=0;i<m;i++){
            scanf("%lld",&ask[i]);
            for(int j=0;j<26;j++)
                scanf("%lld",&num[i][j]);
        }
        for(int i=0;i<n;i++)
            tree.Add(str[i]-'a');
        tree.Count();
        solve();
        printf("\n");
    }
    return 0;
}


Camera2Demo 在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作 立即下载

相关推荐

Mplus实战:随机截距交叉滞后模型(RI-CLPM)在心理学纵向研究中的进阶应用

本文深入探讨了随机截距交叉滞后模型(RI-CLPM)在心理学纵向研究中的进阶应用,通过Mplus实战演示了模型设定、结果解读及进阶建模策略。RI-CLPM能有效区分个体间差异和个体内变化,适用于追踪青少年手机使用与抑郁症状等研究。文章还提供了样本量规划、模型比较和结果可视化等实用技巧,助力研究者避免常见陷阱。

weixin_29220405的博客 369

HDU 4426 Palindromic Substring(回文树+哈希)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4426 WA: 1.k有没有 long long 2.回文串是取前一半 解题思路: 利用回文树获取本质不同的回文串的数量以及他们回文串前一半第一次出现的位置(起点终点位置)。 我们搞一个结构体:记录上面的信息,同时还需要一个变量计算hash值 对于每一次询问,我们O(N)预处理整个串的ha...

shadiao.的博客 185

Quartus Prime器件库安装实战:从版本选择到权限避坑指南

本文详细介绍了Quartus Prime器件库的安装全流程,从版本选择、精准下载到权限设置和安装验证。重点解析了版本匹配的黄金法则、管理员权限的必要性以及安装路径的最佳实践,帮助用户避开常见陷阱,确保器件库安装一次成功。

weixin_33713707的博客 514

HDU 4426 (ZOJ 3661) Palindromic Substring 后缀数组二分 + Manacher + Hash

题目大意: 就是现在对于T(T 大致思路: 首先用Manacher算法处理出各个字符为中心的回文半径, 然后由于一个长度为n的字符串中最多只有O(n)个不同的回文串(其实位置不同但序列相同视为相同), 所以可以再利用mx的右移来判断是否可能出现的新的回文串 ( mx 参照2014年国家集训队徐毅论文中Manacher的做法), 对于每一种回文串Hash判重即可 然后对于每一种回文

Gatevin的专栏 1308

六自由度机器人(机械臂)运动学建模及运动规划系列(一)——简介

毕业设计做了六轴机器人相关的课题,做完之后学到很多,在这里分享一下。

weixin_47849087的博客 2万+

1020空心杯电机驱动设计与ESP32实战

空心杯电机是一种高动态响应的直流微特电机,其驱动本质是解决电感负载下的大di/dt启动、反电动势耦合与电流纹波抑制问题。核心原理在于建立包含内阻、电感和反电动势的等效电路模型,并据此匹配开关器件、PWM参数与采样闭环。技术价值体现在小体积下实现毫秒级响应、低噪声(>30kHz)、高精度电流保护(±50mA)及热鲁棒性。典型应用于微型航模、手持云台与精密执行器等对功率密度和动态性能敏感的嵌入式系统。本文以1020规格空心杯电机为对象,基于ESP32平台完成从MOSFET选型、32kHz硬件PWM生成到INA2

weixin_42298164的博客 579

hdu 4426 Palindromic Substring 字符串hash

这个题目真的wa了两天,最后居然是求最长回文子串的地方边界条件没有处理好,真心跪了。 #include #include #include #include #include using namespace std; const int maxn=4e5+9,maxm=11371111;; const long long mod=777777777; char a[maxn]; i

yrleep的专栏 1280

SAR ADC和sigma delta ADC的区别

0、ADC基本概念 ADC,即analog to digital converter,模拟到数字的转换器,简称模数转换器。 为什么需要ADC?因为现实的世界中,电信号是连续的,例如心电信号,或者声音信号,这些连续的信号被称为“模拟信号”。 图1:心电信号 图2:声音信号 然而这种连续的信号是无法被计算机处理的,计算机只认识0和1组成的“数字信号“。ADC就充当了这样一个桥梁,将“模拟信号”转换为计算机能识别的“数字信号”。举个例子,当前的心电电压为1.2V(实际没有这么高),ADC可能会得

长河柱天的博客 2万+

hdu4426 manacher算法+Hash

参考了网上的思路,第一次写hash, 写得很纠结 ,结果因为统计的时候超int了,调到想死。。。 ACcode: #include #include #include #include #include using namespace std; typedef long long LL; const int PR=37; const int NS=111110; const in

丿Smilē 丶晨星灬 990

Cesium 相机操作

Cesium 提供了三种方式对相机的位置进行摆放。

虎康的博客 2587

OpenClaw 在 Docker 容器中的部署实战——零配置启动

本文介绍了OpenClaw在Docker容器中的快速部署方法,对比了本地部署与容器化部署的优势。通过官方镜像和Docker Compose两种方式,5分钟即可完成部署,并详细讲解了配置管理方案(挂载配置文件和环境变量)。文章还提供了飞书集成配置方法,以及生产环境下的日志管理、资源限制、健康检查等优化建议。最后包含常见问题排查指南,帮助开发者快速实现OpenClaw的容器化部署。

刘一说的IT专栏 903

HDU 4426 Palindromic Substring

Description In the kingdom of string, people like palindromic strings very much. They like only palindromic strings and dislike all other strings. There is a unified formula to calculate the score

Occult 877

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

Coding... 5498

HDU 4426 Palindromic Substring

Palindromic Substring Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged onHDU. Original ID:442664-bit integer IO format:%I64d Java class name:Main In the king...

weixin_30591551的博客 128

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

HDU4426-Palindromic Substring

Palindromic Substring                                                                      Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others)

wang_128的博客 370

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

hdu 4426 Palindromic Substring

因为每个串的不同回文子串数目是O(n)O(n)的,考虑求出不同的子串及其数目,显然回文树可以搞,构建完回文树之后按照最长回文后缀边产生的拓扑序下推标记,查询时直接dfs整棵树求出每个串的value后排序即可。#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<queue> using n

T 364

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HDU - 5421 Victor and String 在字符串的首尾添加字符

题目:有n种操作,开始给你一个空串,给你4中操作 1 c  在字符串的首部添加字符c 2 c  在字符串的尾部添加字符c 3  询问字符中的本质不同的回文串的个数 4 询问字符串中回文串的个数 思路:last[0]表示首部的操作的位置,last[1]表示尾部的操作的位置 代码: #pragma comment(linker, "/STACK:1024000000,10240000

ACVevtor的博客 1354

bzoj2160 拉拉队排练

题目: 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多么的重要。拉拉队的选拔工作已经结束,在雨荨和校长的挑选下,n位集优秀的身材、舞技于一体的美女从众多报名的女生中脱颖而出。这些女生将随着篮球队的小伙子们一起,和对手抗衡,为艾利斯顿篮球队加油助威。一个阳

ACVevtor的博客 828

Gym - 100548G The Problem to Slow Down You

题目:给出A,B两个字符串,求A,B中相同的回文串的对数 思路:对A,B分别建一个回文树,然后分别从奇数根节点和偶数做一次dfs 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include

ACVevtor的博客 768

URAL - 2040 Palindromes and Super Abilities 2

题目:对于输入的字符串str (长度不超过5000000, 只包含a, b两种字符) 如果这个字符串从左到右依次加入字符形成str, 当每个字符加入时求新增加的本质不同的回文串的数量 思路:新增加的要么是0,要么是1,要注意输入和输出,不然会tle 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #in

ACVevtor的博客 609

HDU - 5394 Trie in Tina Town

题目:按要求建一棵树,每个节点有一个字符,求树上的价值=sum(len*cnt),len为回文串长度,cnt为该回文在树上出现了多少次。一共只有a,b,c,d这几种字符,回文串要保证是从上到下的。 思路:把last改成数组就可以了,保存每一层的last 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #

ACVevtor的博客 537

bzoj3676 回文串 回文树

题目: 考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出  现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最  大出现值。  Input 输入只有一行,为一个只包含小写字母(a -z)的非空字符串s。  Output 输出一个整数,为逝查回文子串的最大出现值。  Sample Input 【样例输入l】 abaca

ACVevtor的博客 522

CodeForces - 17E Palisection 邻接表的回文树

题目:给出一个字符串要求找出多少对有相交部分的回文子串。 思路:直接求相交的不好算,我们可以用总对数减去不想交的回文串的对数。 Manacher算法: 先利用差分数组统计出以输入串的第i个字符结尾的回文串的数量sum1[i],然后令sum2[i] = sum2[i - 1] + sum1[i]作为sum1的前缀和, 那么对于中心为i半径为R[i]的回文串来说, 处在这组回

ACVevtor的博客 471

URAL - 1960 Palindromes and Super Abilities 回文树

题目:给定一个字符串s,输出字符串s1...si (1 (1 ≤ len(s) ≤ 10^5) 思路:套一下模板就行了 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include #i

ACVevtor的博客 450

HDU - 5658 CA Loves Palindromic 回文树

题目:给定一个字符串str,Q个询问l,r,问区间[l,r]内本质不同的回文串的个数 1≤T≤10, 1≤length≤1000, 1≤Q≤100000, 1≤l≤r≤length 思路:字符串长度不大,可以先预处理出来 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #incl

ACVevtor的博客 437

bzoj2565 最长双回文串

题目: 顺序和逆序读起来完全一样的串叫做回文串。比如 acbca 是回文串,而 abc 不是( abc 的顺序为“abc” ,逆序为 “cba” ,不相同)。  输入长度为 n 的串 S ,求 S 的最长双回文子串 T, 即可将 T 分为两部分 X , Y ,( |X|,|Y|≥1 )且 X 和 Y 都是回文串。 思路: 正向扫一遍,反向扫一遍 代码: #pragma commen

ACVevtor的博客 409
上一篇: CodeChef - PALPROB Contest Page
下一篇: SPOJ - LCS Longest Common Substring 求2个字符串的最长公共子串
我不会额
博客等级 码龄11年 2粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值