#219. 【NOI2016】优秀的拆分
- 如果一个字符串可以被拆分为 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】优秀的拆分的更多相关文章
- [UOJ#219][BZOJ4650][Noi2016]优秀的拆分
[UOJ#219][BZOJ4650][Noi2016]优秀的拆分 试题描述 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 A 和 B 是任意非空字符串,则我们称该字符串的这种拆分是优秀 ...
- [NOI2016]优秀的拆分&&BZOJ2119股市的预测
[NOI2016]优秀的拆分 https://www.lydsy.com/JudgeOnline/problem.php?id=4650 题解 如果我们能够统计出一个数组a,一个数组b,a[i]表示以 ...
- luogu1117 [NOI2016]优秀的拆分
luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i ...
- 【BZOJ4560】[NOI2016]优秀的拆分
[BZOJ4560][NOI2016]优秀的拆分 题面 bzoj 洛谷 题解 考虑一个形如\(AABB\)的串是由两个形如\(AA\)的串拼起来的 那么我们设 \(f[i]\):以位置\(i\)为结尾 ...
- [NOI2016]优秀的拆分(SA数组)
[NOI2016]优秀的拆分 题目描述 如果一个字符串可以被拆分为 \(AABB\) 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 \(aabaaba ...
- 题解-NOI2016 优秀的拆分
NOI2016 优秀的拆分 \(T\) 组测试数据.求字符串 \(s\) 的所有子串拆成 \(AABB\) 形式的方案总和. 数据范围:\(1\le T\le 10\),\(1\le n\le 3\c ...
- [NOI2016]优秀的拆分 后缀数组
题面:洛谷 题解: 因为对于原串的每个长度不一定等于len的拆分而言,如果合法,它将只会被对应的子串统计贡献. 所以子串这个限制相当于是没有的. 所以我们只需要对于每个位置i求出f[i]表示以i为开头 ...
- [BZOJ]4650: [Noi2016]优秀的拆分
Time Limit: 30 Sec Memory Limit: 512 MB Description 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串, ...
- [Noi2016]优秀的拆分
来自F allDream的博客,未经允许,请勿转载,谢谢. 如果一个字符串可以被拆分为 AABB 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aab ...
- 【刷题】BZOJ 4650 [Noi2016]优秀的拆分
Description 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆分是优秀的.例如,对于字符串 aabaabaa,如果令 A ...
随机推荐
- uboot配置和编译过程详解【转】
本文转载自:http://blog.csdn.net/czg13548930186/article/details/53434566 uboot主Makefile分析1 1.uboot version ...
- HDU 2036:改革春风吹满地
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- receive和process的过程
(一) receive最终在fuse_kern_chan.c中的fuse_kern_chan_receive函数实现,使用系统调用读取 res = read(fuse_chan_fd(ch), buf ...
- windows下运行swoole搭建环境
swoole windows环境搭建 swoole框架是一个很神奇很厉害的框架,它弥补了PHP的本身的一些不足之处.其实swoole确切的说是一个使用C语言编写的PHP扩展,并且这个扩展不能够在win ...
- [Java] 读取文件
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如 ...
- 「LuoguP1799」 数列_NOI导刊2010提高(06)
题目描述 虽然msh长大了,但她还是很喜欢找点游戏自娱自乐.有一天,她在纸上写了一串数字:1,1,2,5,4.接着她擦掉了一个l,结果发现剩下1,2,4都在自己所在的位置上,即1在第1位,2在第2位, ...
- Table View Programming Guide for iOS---(二)----Table View Styles and Accessory Views
Table View Styles and Accessory Views 表格视图的风格以及辅助视图 Table views come in distinctive styles that are ...
- 038--HTML
一.HTML的定义 1. 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 2. 浏览器按顺序渲染网 ...
- E20170507-ts
prompt n. 提示; 提示符 object n. 物体; 目标; 宾语; asterisk * n. 星号,星状物; Ampersand & Slash n. 斜线; ...
- Swift里计数相关的小细节
Swift里对于字符串这些引入了index型,相对其他语言而言字符操作更安全了,但是问题就是一不注意搞错范围就会有各种离奇的bug. 在讲主题前,先说个小细节. Swift里非常严密的定义了一大堆字符 ...