【ACM-ICPC 2018 南京赛区网络预赛 I】Skr
【链接】 我是链接,点我呀:)
【题意】
让你把一个字符串的所有回文子串加起来。(当做数字加起来)
求他们的和。
【题解】
回文树。
从两个根节点分别遍历整棵回文树。
按照每个节点的定义。
得到每个节点对应的数字就好。
(节点之间都有联系,很容易快速搞出来到达下一个节点的数字是什么的。
有点卡内存。一直优化才没超内存的。
后来发现,空间不用*2的。。。
$直接O(N*ALP)的空间复杂度就好$
$不用O(N*2*ALP)。。$
【代码】
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 2e6+10;
const int ALP = 10;
const LL MOD = 1e9+7;
LL _pow(LL x,LL y){
LL a = 1;x%=MOD;
while (y){
if (y&1) a = (a*x)%MOD;
x=(x*x)%MOD;
y>>=1;
}
return a;
}
struct PAM{
int nex[maxn][ALP];
int fail[maxn];
int len[maxn],root,root1;
int s[maxn];
int last,n,p;
LL ans;
int newnode(int l){
for(int i=0;i<ALP;i++)
nex[p][i]=0;
len[p]=l;
return p++;
}
void init(){
ans = 0;
p = 0;
root = newnode(0);
root1 = newnode(-1);
last = 0;
n = 0;
s[n] = -1;
fail[0] = 1;
}
int get_fail(int x){
while(s[n-len[x]-1] != s[n]) x = fail[x];
return x;
}
void add(int c){
c = c-'0';
s[++n] = c;
int cur = get_fail(last);
if(!nex[cur][c]){
int now = newnode(len[cur]+2);
fail[now] = nex[get_fail(fail[cur])][c];
nex[cur][c] = now;
}
last = nex[cur][c];
}
void dfs(int x,LL s,int len){
for (int i = 0;i < 10;i++){
if (nex[x][i]!=0){
LL ts = s;
int tlen = len;
if (x==root1){
ts = (ts*10 + i)%MOD;
tlen++;
}else if (x==root){
ts = (ts*10 + i)%MOD;
ts = (ts*10 + i)%MOD;
tlen+=2;
}else{
ts = (ts*10 + i)%MOD;
tlen++;
ts = (ts+i*_pow(10,tlen)%MOD)%MOD;
tlen++;
}
ans = (ans+ts)%MOD;
dfs(nex[x][i],ts,tlen);
}
}
}
}pam;
string s;
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
cin >> s;
int len = s.size();
pam.init();
for(int i=0;i<len;i++){
pam.add(s[i]);
}
pam.dfs(pam.root1,0,0);
pam.dfs(pam.root,0,0);
printf("%lld\n",pam.ans);
return 0;
}
【ACM-ICPC 2018 南京赛区网络预赛 I】Skr的更多相关文章
- ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)
https://nanti.jisuanke.com/t/30998 题意 给一串由0..9组成的数字字符串,求所有不同回文串的权值和.比如说“1121”这个串中有“1”,“2”,“11”,“121” ...
- ACM-ICPC 2018 南京赛区网络预赛 I. Skr(回文树)
题意 https://nanti.jisuanke.com/t/A1955 求所有本质不同的回文串转成数后的和. 思路 如果了解回文树的构造原理,那么这题就很简单了,回文树每个结点代表一个回文串,每添 ...
- ACM-ICPC 2018 南京赛区网络预赛 J.sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- ACM-ICPC 2018 南京赛区网络预赛 E题
ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...
- ACM-ICPC 2018 南京赛区网络预赛B
题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...
- 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)
J. Sum 26.87% 1000ms 512000K A square-free integer is an integer which is indivisible by any squar ...
- 计蒜客 30996.Lpl and Energy-saving Lamps-线段树(区间满足条件最靠左的值) (ACM-ICPC 2018 南京赛区网络预赛 G)
G. Lpl and Energy-saving Lamps 42.07% 1000ms 65536K During tea-drinking, princess, amongst other t ...
- 计蒜客 30990.An Olympian Math Problem-数学公式题 (ACM-ICPC 2018 南京赛区网络预赛 A)
A. An Olympian Math Problem 54.28% 1000ms 65536K Alice, a student of grade 66, is thinking about a ...
- ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall
题目链接:https://nanti.jisuanke.com/t/30991 2000ms 262144K Feeling hungry, a cute hamster decides to o ...
- ACM-ICPC 2018 南京赛区网络预赛
轻轻松松也能拿到区域赛名额,CCPC真的好难 An Olympian Math Problem 问答 只看题面 54.76% 1000ms 65536K Alice, a student of g ...
随机推荐
- APP漏洞自动化扫描专业评测报告(下篇)
上篇.中篇回顾:通过收费情况.样本测试后的扫描时间.漏洞项对比以及扫描能力这几个方面对阿里聚安全[1].360App漏洞扫描[2].腾讯金刚审计系统[3].百度移动云测试中心[4]以及AppRisk ...
- python TypeError: 'builtin_function_or_method' object is not iterable keys
statinfo = os.stat( OneFilePath ) if AllFiles.has_key( statinfo.st_size ): OneKey = AllFiles[ statin ...
- CharsRefIntHashMap并不比HashMap<String, Integer>快
我模仿lucene的BytesRef写了一个CharsRefIntHashMap,实測效果并不如HashMap<String, Integer>.代码例如以下: package com.d ...
- HDU 2027 汉字统计
汉字统计 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- Vue环境搭建+VSCode+Win10
一.安装Node.js(js的运行环境) 1.在Node.js官网https://nodejs.org/en/download/下载安装包.2.下载后进行安装.3.打开命令行,输入node -v可以查 ...
- rk3288的pcba模块编译调试笔记【学习笔记】
平台信息:内核:linux3.0.68 系统:android/android6.0平台:rk3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 摘要:最近在负责r ...
- 国内物联网平台初探(三) ——QQ物联·智能硬件开放平台
平台定位 将QQ帐号体系.好友关系链.QQ消息通道及音视频服务等核心能力提供给可穿戴设备.智能家居.智能车载.传统硬件等领域的合作伙伴,实现用户与设备.设备与设备.设备与服务之间的联动. 实现用户与设 ...
- Beta 分布归一化的证明(系数是怎么来的),期望和方差的计算
1. Γ(a+b)Γ(a)Γ(b):归一化系数 Beta(μ|a,b)=Γ(a+b)Γ(a)Γ(b)μa−1(1−μ)b−1 面对这样一个复杂的概率密度函数,我们不禁要问,Γ(a+b)Γ(a)Γ(b) ...
- 用虚拟机创建win7 32位系统来测试win 7 64位系统无法安装cad 2004 缺少acdb16.dll的问题
- Dijkstra算法原理及证明(转)
Dijkstra算法及其证明 算法: 设G是带权图,图中的顶点多于一个,且所有的权都为正数.本算法确定从顶点S到G中其他各个顶点的距离和最短通路.在本算法中P表示带永久标记的顶点的集合.顶点A的前驱是 ...