如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆分是优秀的。

例如,对于字符串 aabaabaa,如果令 A=aabA=aab,B=aB=a,我们就找到了这个字符串拆分成 AABBAABB 的一种方式。

一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分。比如我们令 A=aA=a,B=baaB=baa,也可以用 AABBAABB 表示出上述字符串;但是,字符串 abaabaa 就没有优秀的拆分。

现在给出一个长度为 nn 的字符串 SS,我们需要求出,在它所有子串的所有拆分方式中,优秀拆分的总个数。这里的子串是指字符串中连续的一段。

以下事项需要注意:

出现在不同位置的相同子串,我们认为是不同的子串,它们的优秀拆分均会被记入答案。
在一个拆分中,允许出现 A=BA=B。例如 cccc 存在拆分 A=B=cA=B=c。
字符串本身也是它的一个子串。
输入格式
每个输入文件包含多组数据。输入文件的第一行只有一个整数 TT,表示数据的组数。保证 ≤T≤≤T≤。 接下来 TT 行,每行包含一个仅由英文小写字母构成的字符串 SS,意义如题所述。 输出格式
输出 TT 行,每行包含一个整数,表示字符串 SS 所有子串的所有拆分中,总共有多少个是优秀的拆分。 样例一
input aabbbb
cccccc
aabaabaabaa
bbaabaababaaba output explanation 我们用 S[i,j]S[i,j] 表示字符串 SS 第 ii 个字符到第 jj 个字符的子串(从 开始计数)。 第一组数据中,共有 个子串存在优秀的拆分: S[,]=aabbS[,]=aabb,优秀的拆分为 A=aA=a,B=bB=b; S[,]=bbbbS[,]=bbbb,优秀的拆分为 A=bA=b,B=bB=b; S[,]=aabbbbS[,]=aabbbb,优秀的拆分为 A=aA=a,B=bbB=bb。 而剩下的子串不存在优秀的拆分,所以第一组数据的答案是 。 第二组数据中,有两类,总共 个子串存在优秀的拆分: 对于子串 S[,]=S[,]=S[,]=ccccS[,]=S[,]=S[,]=cccc,它们优秀的拆分相同,均为 A=cA=c,B=cB=c,但由于这些子串位置不同,因此要计算 次; 对于子串 S[,]=ccccccS[,]=cccccc,它优秀的拆分有 种:A=cA=c,B=ccB=cc 和 A=ccA=cc,B=cB=c,它们是相同子串的不同拆分,也都要计入答案。 所以第二组数据的答案是 +=+=。 第三组数据中,S[,]S[,] 和 S[,]S[,] 各有 种优秀的拆分,其中 S[,]S[,] 是问题描述中的例子,所以答案是 +=+=。 第四组数据中,S[,]S[,],S[,]S[,],S[,]S[,],S[,]S[,],S[,]S[,] 各有 种优秀的拆分,S[,]S[,] 有 种优秀的拆分,所以答案是 +=+=。 样例二
见样例数据下载。 样例三
见样例数据下载。 限制与约定
对于全部的测试点,保证 ≤T≤≤T≤。以下对数据的限制均是对于单组输入数据而言的,也就是说同一个测试点下的 TT 组数据均满足限制条件。 我们假定 nn 为字符串 SS 的长度,每个测试点的详细数据范围见下表: 测试点编号 nn 其他约束
、 ≤≤ SS中所有字符全部相同
、 ≤≤
、 ≤≤ 无
、 ≤≤
、 ≤≤
、 ≤≤
、 ≤≤
≤≤
≤≤
≤≤
≤≤
≤≤
≤≤
时间限制:.5s1.5s
空间限制:512MB

题干

哈哈,第一次啥都没看就独立完成了一道不水的题(虽然只有95分)。

希望考试时也能这样(部分分也是很重要的)。

好吧说一下思路:

  首先每得到一个新的字符串,先预处理两个数组ok[i][j],b[i],分别表示,从i到 j是否是两个相同的字符串(也就是是否存在AA)。和以i开头有几个相连的相同字符串(也就是有几个BB)

  然后n^2扫一遍 ans+=(ok[i][j])*b[j];  就ok了

  

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstdio>
using namespace std;
#define LL unsigned long long
#define MOD 1000000007
#define base 211
LL n,b[],ha[][];
char s[];
int T;
bool ok[][];
void first()
{
for(int i=;i<=n;i++)
for(int j=i;j<=n;j++)
ha[i][j]=(ha[i][j-]*base+(LL)s[j])%MOD;
}
int main( )
{
scanf("%d",&T);
while(T--)
{
cin>>(s+);
memset(ok,,sizeof(ok));
memset(b,,sizeof(b));
memset(ha,,sizeof(ha)); n=strlen(s+);first();
for(int i=;i<=n;i++)
for(int l=;i+l+l-<=n;l++)
if(ha[i][i+l-]==ha[i+l][i+l*-])
ok[i][i+l+l-]=,b[i]++; LL ans=;
for(int i=;i<=n;i++)
for(int l=;l+i-<=n;l++)
if(ok[i][i+l-]) ans+=b[i+l];
cout<<ans<<endl;
}
return ;
}

  

#219. 【NOI2016】优秀的拆分的更多相关文章

  1. [UOJ#219][BZOJ4650][Noi2016]优秀的拆分

    [UOJ#219][BZOJ4650][Noi2016]优秀的拆分 试题描述 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 A 和 B 是任意非空字符串,则我们称该字符串的这种拆分是优秀 ...

  2. [NOI2016]优秀的拆分&&BZOJ2119股市的预测

    [NOI2016]优秀的拆分 https://www.lydsy.com/JudgeOnline/problem.php?id=4650 题解 如果我们能够统计出一个数组a,一个数组b,a[i]表示以 ...

  3. luogu1117 [NOI2016]优秀的拆分

    luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i ...

  4. 【BZOJ4560】[NOI2016]优秀的拆分

    [BZOJ4560][NOI2016]优秀的拆分 题面 bzoj 洛谷 题解 考虑一个形如\(AABB\)的串是由两个形如\(AA\)的串拼起来的 那么我们设 \(f[i]\):以位置\(i\)为结尾 ...

  5. [NOI2016]优秀的拆分(SA数组)

    [NOI2016]优秀的拆分 题目描述 如果一个字符串可以被拆分为 \(AABB\) 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 \(aabaaba ...

  6. 题解-NOI2016 优秀的拆分

    NOI2016 优秀的拆分 \(T\) 组测试数据.求字符串 \(s\) 的所有子串拆成 \(AABB\) 形式的方案总和. 数据范围:\(1\le T\le 10\),\(1\le n\le 3\c ...

  7. [NOI2016]优秀的拆分 后缀数组

    题面:洛谷 题解: 因为对于原串的每个长度不一定等于len的拆分而言,如果合法,它将只会被对应的子串统计贡献. 所以子串这个限制相当于是没有的. 所以我们只需要对于每个位置i求出f[i]表示以i为开头 ...

  8. [BZOJ]4650: [Noi2016]优秀的拆分

    Time Limit: 30 Sec  Memory Limit: 512 MB Description 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串, ...

  9. [Noi2016]优秀的拆分

    来自F allDream的博客,未经允许,请勿转载,谢谢. 如果一个字符串可以被拆分为 AABB 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aab ...

  10. 【刷题】BZOJ 4650 [Noi2016]优秀的拆分

    Description 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆分是优秀的.例如,对于字符串 aabaabaa,如果令 A ...

随机推荐

  1. devm_regmap_init_i2c【转】

    本文转载自:http://blog.csdn.net/u011975319/article/details/52128845 本文有此处转载http://blog.csdn.net/luckywang ...

  2. atexit函数的使用【学习笔记】

    #include "apue.h" static void my_exit1(void); static void my_exit2(void); int main(void) { ...

  3. POJ 2739 Sum of Consecutive Prime Numbers( *【素数存表】+暴力枚举 )

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19895 ...

  4. YTU 2209: 建立链表(线性表)

    2209: 建立链表(线性表) 时间限制: 1 Sec  内存限制: 128 MB 提交: 282  解决: 185 题目描述 (线性表)设键盘输入n个英语单词,输入格式为n, w1, w2, -,w ...

  5. dede摘要长度,dedecms摘要限制,dedecms摘要字数

    dede摘要长度,dedecms摘要限制,dedecms摘要字数 如果可以有效控制文章摘要的字数,那么就可以使得页面布局很灵活. 在Dedecms中,在列表页调用文章摘要的方法主要有: 1:[fiel ...

  6. MYSQL进阶学习笔记十一:MySQL 表的分析,检查和优化!(视频序号:进阶_28)

    知识点十二:MySQL 表的分析,检查和优化(28) 表的分析,检查和优化: 定期分析表: ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, ...

  7. WAS:节点不同步问题

    刀片服务器硬盘坏了,换了硬盘后,通过dmgr无法重启该节点上的server. 单机./starServer 后,服务虽然启动了,但后台一直提示如下: [-- ::: CST] RoleViewLead ...

  8. CALayer和UIView

    前言 本次分享将从以下方面进行展开: 曾被面试官问倒过的问题:层与视图的关系 CALayer类介绍及层与视图的关系 CAShapeLayer类介绍 UIBezierPath贝塞尔曲线讲解 CoreAn ...

  9. [Selenium] 如何使用Chrome Options 定制测试Chrome 浏览器的特定属性 (类似FirefoxProfiles)

    Chrome Options 类似于FirefoxProfiles,用于定制待测试的Chrome 浏览器的特定属性 1)如果希望测试某个浏览器插件,可通过addExtensions方式提前加载以.cr ...

  10. macbook pro上安装虚拟机

    第一步:下载MacHunter的app应用商店 第二步:在MacHunter内下载Parallels Desktop虚拟机 第三步:如果在这个商店下载不下来,在网络资源上直接下载Parallels D ...