题意:UVU形式的串的个数,V的长度规定,U要一样,位置不同即为不同字串

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1770

题解:一开始理解错题意,以为是abcxxxcba(xxx为v),开心地打了后缀数组后发现哎样例不对丫。。

UVA的意思是abcxxxabc(xxx为v)。

类似poj3693,我们暴力枚举U的长度L,对原串按U的长度进行分块。

对于当前分块出来的点x,y=x+u+v是UVU中后一个U中的对应点。

然后往前往后匹配:这里其实是应该用后缀数组+rmq匹配的,然而我用for循环直接暴 过了。。

然后我们得到了两条串的往前往后的lcp1和lcp2。(往前往后都只用匹配L就够了,不然会在下一个分割点找到)

ans+=lcp1+lcp2-L

减L的原因:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<queue>
 6 using namespace std;
 7
 8 typedef long long LL;
 9 const int N=100010;
10 int sl,cl,v;
11 char c[N];
12
13 int main()
14 {
15     freopen("a.in","r",stdin);
16     freopen("me.out","w",stdout);
17     int T,cas=0;
18     scanf("%d",&T);
19     while(T--)
20     {
21         scanf("%d",&v);
22         scanf("%s",c+1);
23         cl=sl=strlen(c+1);
24         int x,y,now;
25         LL t0,t1,ans=0;
26         for(int L=1;L<=cl;L++)
27         {
28             for(int i=0;(i*L)<=cl;i++)
29             {
30                 x=i*L+1,y=((i+1)*L)+v+1;
31                 if(y>cl) break;
32                 t0=t1=0;
33                 for(int j=0;j<L;j++)
34                 {
35                     if(c[x-j]!=c[y-j] || x-j<1) break;
36                     t0++;
37                 }
38                 for(int j=0;j<L;j++)
39                 {
40                     if(c[x+j]!=c[y+j] || y+j>cl) break;
41                     t1++;
42                 }
43                 if(t0 && t1 && t0+t1>=L) ans+=t1+t0-L;
44             }
45         }
46         printf("Case %d: %lld\n",++cas,ans);
47     }
48     return 0;
49 }

转载于:https://www.cnblogs.com/KonjakJuruo/p/5920400.html

【uva10829-求形如UVU的串的个数】后缀数组+rmq or 直接for水过相关推荐

  1. URAL 题目1297. Palindrome(后缀数组+RMQ求最长回文子串)

    1297. Palindrome Time limit: 1.0 second Memory limit: 64 MB The "U.S. Robots" HQ has just ...

  2. 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串

    1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...

  3. ural 1297 O(nlogn) 后缀数组求最长回文字串

    把原串复制一份反过来接在原串后面,中间用没出现过的字符隔开,然后跑后缀数组,在原创枚举每一个位为回文中心(分奇偶讨论),则回文串长度相当于原串与反串对应位置的lcp,所以先用ST预处理,然后查询.复杂 ...

  4. Manacher算法 - 求最长回文串的利器

    求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...

  5. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  6. 求有多少个连续字串中所有的字母都出现了偶数次

    给出一个长度为 n 的字符串(1<=n<=100000),求有多少个连续字串中所有的字母都出现了偶数次. http://acm.upc.edu.cn/problem.php?id=1001 ...

  7. 后缀数组以及利用后缀数组求取最长公共字串

    后缀树组是一个字符串的所有后缀的排序数组.后缀是指从某个位置 i 开始到整个串末尾结束的一个子串.字符串 r 的从 第 i 个字符开始的后缀表示为 Suffix(i) ,也就是Suffix(i)=r[ ...

  8. 串′ababaaababaa′的next数组(求next数组思路与实例)

    刚刚开始遇到这个问题说实话完全懵逼,然后简单搜了下,还是理解的模棱两可.最后看了几篇博客,现在才算是真正的理解了. 首先在将例子之前先说说这个next数组求解的思路: 第一位的next的值是0,第二位 ...

  9. 后缀数组 + Hash + 二分 or Hash + 二分 + 双指针 求 LCP ---- 2017icpc 青岛 J Suffix (假题!!)

    题目链接 题目大意: 就是给你n个串每个串取一个后缀,要求把串拼起来要求字典序最小!! sum_length_of_n≤5e5sum\_length\_of\_n\leq 5e5sum_length_ ...

最新文章

  1. keyshot渲染图文教程_一篇文章教你学会3D建模和渲染 反正我是信了
  2. RDIFramework.NET ━ 9.5 组织机构管理 ━ Web部分
  3. es6 的数组的方法
  4. window.open参数完全手册
  5. cfd计算linux windows,CFD计算分析时常用的数值模拟方法 | 坐倚北风
  6. 如何用CSS让一个容器水平垂直居中?
  7. 用python写一个彩票过滤器_37.Python自定义过滤器
  8. 安卓程序运行后控件不显示_智能镜子显示屏掀起了智能家居行业的新潮流
  9. ssas 维度属性_Analysis Services(SSAS)多维数据集–维度属性和层次结构
  10. 会议室预定模拟登陆网站
  11. 机器学习笔记(十一):优化梯度公式 | 凌云时刻
  12. Scratch1.4案例:射日小游戏
  13. ricequant量化交易文件如何保存和读取
  14. python学习的读书路线
  15. Chrome截取长屏图片
  16. C++:构造函数以及析构函数
  17. Matomo API 官方接口详情
  18. Windows系统下R语言环境搭建及高级图表绘制
  19. pr系统兼容性报告不支持视频驱动程序有什么影响?怎么解决?
  20. 在mini2440上移植使用ffmpeg录像

热门文章

  1. 找到表中某一列值相同的记录,而且只要其中一条记录的sql
  2. JAVA调用R语言之Rserve(二)
  3. androidstudio 日历视图怎么显示农历_记事日历-记事与时间管理工具
  4. 过渡元素最外层电子数_元素周期表
  5. 可微偏导数一定存在_【导数压轴题】“偏导数”与含参不等式
  6. html如何实现新闻标题缩略,CSS新闻标题后面跟着new图标_CSS实例
  7. 高斯-赛德尔迭代法简介
  8. transition标签_图解直到今天也没什么人知道的原生dialog标签(非常详细)
  9. 6.QML动画——状态与过渡
  10. 膨胀腐蚀操作(MATLAB)