CodeForces7D 字符串hash + dp
https://cn.vjudge.net/problem/20907/origin
长度是 n 的字符串 s,如果它自身是回文数,且它的长度为 的前缀和后缀是 (k - )-回文数,则它被称作 k-回文数。按照定义,任何字符串 (甚至空字符串) 都是 -回文数。 字符串 s 的回文度,被定义为这样的一个最大数 k,满足 s 是 k-回文数。例如,"abaaba" 具有的回文度是 。 给定一个字符串。您的任务是,找出它的全部前缀的回文度之和。 输入
输入数据的第一行,包含了一个非空的字符串,由拉丁字母和数字组成。字符串的长度,不超过 · 。字符串是大小写敏感的。 输出
输出仅有的一个数 — 字符串的全部前缀的回文度之和。
题意
当我们想到用dp思想的时候,问题就转化为了求这个字符串每一个前缀是否是回文串的问题。
字符串hash其实和进制进位有一些相似,我们想到了这一点就可以线性的时间正着求前缀字符串的hash值和前缀字符串的倒转的hash值
当我们求正序前缀的hash的时候,每一次操作就相当于再字符串的最前面插入一个值,所以我们要首先处理出每一位的指数级ans,然后f[i] = f[i - 1] + str[i] * ans;
当我们求逆序前缀的hash值的时候,每一次操作就相当于在字符串的最后插入一个值,整个字符串就要左移一位然后把这个位塞进去 也就是f [i]= f[i - 1] * tmp + str[i];
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
#define For(i, x, y) for(int i=x;i<=y;i++)
#define _For(i, x, y) for(int i=x;i>=y;i--)
#define Mem(f, x) memset(f,x,sizeof(f))
#define Sca(x) scanf("%d", &x)
#define Scl(x) scanf("%lld",&x);
#define Pri(x) printf("%d\n", x)
#define Prl(x) printf("%lld\n",x);
#define CLR(u) for(int i=0;i<=N;i++)u[i].clear();
#define LL long long
#define ULL unsigned long long
#define mp make_pair
#define PII pair<int,int>
#define PIL pair<int,long long>
#define PLL pair<long long,long long>
#define pb push_back
#define fi first
#define se second
typedef vector<int> VI;
const double eps = 1e-;
const int maxn = 5e6 + ;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + ;
int N,M,tmp,K;
char str[maxn];
int dp[maxn];
ULL f1[maxn],f2[maxn];
int main()
{
scanf("%s",str + );
int l = strlen(str + );
ULL ans = ;
LL sum = ;
dp[] = ;
for(int i = ; i <= l; i ++){
if(str[i] >= '' && str[i] <= ''){
str[i] = str[i] - '';
}else if(str[i] >= 'a' && str[i] <= 'z'){
str[i] = str[i] - 'a' + ;
}else{
str[i] = str[i] - 'A' + ;
}
f1[i] = f1[i - ] * + str[i];
f2[i] = (f2[i - ] + str[i] * ans);
ans *= ;
if(f1[i] == f2[i]){
dp[i] = dp[i >> ] + ;
sum += dp[i];
}
}
Prl(sum); #ifdef VSCode
system("pause");
#endif
return ;
}
CodeForces7D 字符串hash + dp的更多相关文章
- HDU 5763 Another Meaning dp+字符串hash || DP+KMP
题意:给定一个句子str,和一个单词sub,这个单词sub可以翻译成两种不同的意思,问这个句子一共能翻译成多少种不能的意思 例如:str:hehehe sub:hehe 那么,有**he.he** ...
- [CQOI2014][bzoj3507] 通配符匹配 [字符串hash+dp]
题面 传送门 思路 0x01 KMP 一个非常显然而优秀的想法:把模板串按照'*'分段,然后对于每一段求$next$,'?'就当成可以对于任意字符匹配就行了 对于每个文本串,从前往后找第一个可以匹配的 ...
- hdu 4622 Reincarnation 字符串hash 模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有不超过1e5次的区间查询,输出每次查询区间中不同 ...
- cf244D. Match & Catch 字符串hash (模板)或 后缀数组。。。
D. Match & Catch 能够用各种方法做.字符串hash.后缀数组,dp.拓展kmp,字典树.. . 字符串hash(模板) http://blog.csdn.net/gdujian ...
- [知识点]字符串Hash
1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...
- 【BZOJ-3555】企鹅QQ 字符串Hash
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1545 Solved: 593[Submit][Statu ...
- POJ 1200 字符串HASH
题目链接:http://poj.org/problem?id=1200 题意:给定一个字符串,字符串只有NC个不同的字符,问这个字符串所有长度为N的子串有多少个不相同. 思路:字符串HASH,因为只有 ...
- LA4671 K-neighbor substrings(FFT + 字符串Hash)
题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two s ...
- 各种字符串Hash函数比较(转)
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...
随机推荐
- APP需求调研、对比
二.人脸验证 1.芝麻认证 : 0.4元/次,需要企业企业认证.不能有与芝麻信用类似的业务,如:保险... 2.旷视 : 0.5/次.企业认证.业务限制 3. 百度人脸识别 : 企业认证. 4.科大 ...
- python之旅4[第四篇]
常用内置函数 map 遍历序列,对序列中的每个元素操作,获取新的序列 如下 对所有元素加10 li = [,,,] def func(arg): new_list = map(func,li) pr ...
- Android 修改 Menu字体颜色
转载:http://blog.csdn.net/jayyuz/article/details/55260996 @Override public boolean onCreateOptionsMenu ...
- Sum of Consecutive Prime Numbers POJ - 2739 线性欧拉筛(线性欧拉筛证明)
题意:给一个数 可以写出多少种 连续素数的合 思路:直接线性筛 筛素数 暴力找就行 (素数到n/2就可以停下了,优化一个常数) 其中:线性筛的证明参考:https://blog.csdn.net ...
- python+selenium+unnitest写一个完整的登陆的验证
import unittest from selenium import webdriver from time import sleep class lonInTest (unittest.Test ...
- Jeesite 代码生成
1.mysql数据库建表 参考自带的sys_area 的创表SQL复制来修修改改即可 2.配置代码生成文件覆盖路径 打开eclipse 按ctrl+shift+R 找到jeesite.propert ...
- [NOIp2012] 国王游戏(排序 + 贪心 + 高精度)
题意 给你两个长为 \(n+1\) 的数组 \(a,b\) ,你需要定义一个顺序 \(p\) (\(p_0\) 永远为 \(0\)) 能够最小化 \[ \max_{i=1}^{n} \frac{\pr ...
- P3613 睡觉困难综合征(LCT + 位运算)
题意 NOI2014 起床困难综合症 放在树上,加上单点修改与链上查询. 题解 类似于原题,我们只需要求出 \(0\) 和 \(2^{k - 1} - 1\) 走过这条链会变成什么值,就能确定每一位为 ...
- 06 Zabbix4.0系统CISCO交换机告警模板规划信息(基础)
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 06 Zabbix4.0系统CISCO交换机告警模板规划信息(基础) 1. Host groups ...
- [poj1160][IOI2000]Post Office【动态规划】
传送门 https://vjudge.net/problem/POJ-1160#author=SCU2018 题目描述 在一条水平的公路上建有n个小屋,两个小屋间的距离是它们的横坐标之差的绝对值.保证 ...