题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5635

LCP Array

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 282    Accepted Submission(s): 79
Problem Description
Peter has a string s=s1s2...sn,
let suffi=sisi+1...sn be
the suffix start with i-th
character of s.
Peter knows the lcp (longest common prefix) of each two adjacent suffixes which denotes as ai=lcp(suffi,suffi+1)(1≤i<n).



Given the lcp array, Peter wants to know how many strings containing lowercase English letters only will satisfy the lcp array. The answer may be too large, just print it modulo 109+7.
 
Input
There are multiple test cases. The first line of input contains an integer T indicating
the number of test cases. For each test case:



The first line contains an integer n (2≤n≤105) --
the length of the string. The second line contains n−1 integers: a1,a2,...,an−1 (0≤ai≤n).



The sum of values of n in
all test cases doesn't exceed 106.
 
Output
For each test case output one integer denoting the answer. The answer must be printed modulo 109+7.
 
Sample Input
3
3
0 0
4
3 2 1
3
1 2
 
Sample Output
16250
26
0
 
Source

题目大意:先输入一个t代表着測试组数。再输入一个n表示字符串的长度。s1,s2,s2,s2.......接下去输入n-1个数,表示的最长同样前缀的长度。

即:以第二组測试数据为例

 ai=lcp(suffi,suffi+1);

解题思路:经过分析找到:a[i-1]=a[i]+1。假设一直满足这个条件的话,直接输出26,不满足直接输出0。

须要注意的是:最后一个数a[n-1]一定要大于1。否则直接输出0。

另一个就是第一数a[1]等于0的话,直接乘26。之后遇到0就乘25。

详见代码。

#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; __int64 a[100010],s;
const int Mod=(1e9+7); int main()
{
int t;
scanf("%d",&t);
while (t--)
{
int n;
scanf("%d",&n);
for (int i=1; i<=n-1; i++)
{
scanf ("%I64d",&a[i]);
}
int flag=0;
s=1;
int k=0;
for (int i=1; i<n; i++)
{
if (i==1)
{
if (a[i]==0)
{
s=(s*26)%Mod;
k=1;
}
continue;
}
if (a[i-1]>0&&a[i-1]!=a[i]+1)
flag=1;
else
{
if (a[i]==0)
{
if (k==1)
s=(s*25)%Mod;
else
{
s=(s*26)%Mod;
k=1;
}
}
}
}
if (k==1)
s=(s*25)%Mod;
else
s=(s*26)%Mod;
if (flag==1||a[n-1]>1)
printf ("0\n");
else
printf ("%I64d\n",s);
}
return 0;
}

ai=lcp(suffi,suffi+1)

hdu 5635 LCP Array(BC第一题)的更多相关文章

  1. HDU 5635 ——LCP Array ——————【想法题】

    LCP Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  2. hdu 5178 pairs(BC第一题,,方法不止一种,,我用lower_bound那种。。。)

    题意: X坐标上有n个数.JOHN想知道有多少对数满足:x[a]-x[b]<=k(题意给)[a<b] 思路: 额,,,直接看代码吧,,,, 代码: int T,n,k; int x[100 ...

  3. HDU 1312 Red and Black 第一题搜索!

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. 《学习OpenCV》练习题第五章第一题ab

    这道题是载入一幅带有有趣纹理的图像并用不同的模板(窗口,核)大小做高斯模糊(高斯平滑),然后比较用5*5大小的窗口平滑图像两次和用11*11大小的窗口平滑图像一次是否接近相同. 先说下我的做法,a部分 ...

  5. BZOJ 3172([Tjoi2013]单词-后缀数组第一题+RMQ)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 268   Solved: 145 [ Submit][ St ...

  6. 2018年多校第三场第一题 A. Ascending Rating hdu6319

    比赛地址:http://acm.hdu.edu.cn/contests/contest_show.php?cid=804 题目编号:第一题 A. Ascending Rating  hdu6319 题 ...

  7. [py]letcode第一题求和

    letcode第一题, tm的不好弄. 想了很久想到了一个粗蠢的解决办法. Given an array of integers, return indices of the two numbers ...

  8. leetcode第一题(easy)

    第一题:题目内容 Given an array of integers, return indices of the two numbers such that they add up to a sp ...

  9. 纪中10日T1 2300. 【noip普及组第一题】模板题

    2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 K ...

随机推荐

  1. 事件 event

    添加移除函数(removeEventListener)时三个参数保持一致,否则会失败,而且不会有错误提示 var btn = document.getElementById(“myBtn”); btn ...

  2. Velocity(7)——velocity进阶用法

    1.截取部分字段substring 1 原始字符串:$!ag.tagValue,也许很长,前端页面展示时需要截取字符串. 2 #set($str=$!ag.tagValue) 3 4 #if($str ...

  3. link和import导入外部样式的区别

    1.结构 link语法结构 <link rel="stylesheet" href="CSSurl" type="text/css" ...

  4. 基础拾遗----RabbitMQ(含封装类库源码)

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  5. 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区

    开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...

  6. java equals 和 == 的区别

    )1. == 可以用来比较基本类型以及引用类型.在基本类型中 == 比较的是两个变量的值是否相等.在引用类型中,== 比较的是两个对象的内存地址是否相等. )2. equals 只能用来比较引用类型. ...

  7. 项目实战5—企业级缓存系统varnish应用与实战

    企业级缓存系统varnish应用与实战 环境背景:随着公司业务快速发展,公司的电子商务平台已经聚集了很多的忠实粉丝,公司也拿到了投资,这时老板想通过一场类似双十一的活动,进行一场大的促销,届时会有非常 ...

  8. Web Mining and Big Data 公开课学习笔记 ---lecture0

    0.1  课程主要内容:Big data technologies , Machine Learning and AI 0.6   OUTLINE: predict the future using ...

  9. 快速上手使用Maven

    maven的相关命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码(编译到target文件夹中) mvn test-compile :编译测 ...

  10. Uncaught TypeError: download is not a function at HTMLAnchorElement.onclick (index.html:25)

    前段时间调试html报了这样的一个错误 Uncaught TypeError: download is not a function     at HTMLAnchorElement.onclick ...