CF611D lcp+dp
本篇博客只是留个辣鸡的自己标记一下,误入的同学请出门左转博客
https://blog.csdn.net/loy_184548/article/details/50865777
代码神马的也是复制啊
#include <bits/stdc++.h>
#define mst(a) memset(a,0,sizeof (a))
#define FOR(i,n) for (int i = 0; i < n; i++)
#define INF 1e9
#define mod 1000000007
#define eps 1e-10
using namespace std; typedef long long ll;
int n;
string s;
int lcp[][];
int dp[][]; //前i长度,最后一个数长度为j的方法数
int sum[][];
void getLcp() //最长公共前缀lcp
{
for (int i = n; i > ; i--)
{
for (int j = n; j > i; j--)
{
if (s[i] == s[j]) lcp[i][j] = lcp[i + ][j + ] + ;
else lcp[i][j] = ;
}
}
}
bool check(int a,int b)
{
char ret1 = s[a+lcp[a][b]];
char ret2 = s[b+lcp[a][b]];
if (ret1 < ret2) return true; //满足条件返回1
else return false;
}
void solve()
{
for (int i = ; i <= n; i++) sum[][i] = ; //初始化
for (int i = ; i <= n; i++)
{
for (int j = ; j <= i; j++)
{
/*在前面基础上加上一段j长度*/
int len = i - j + ; //j串的开头位置
if (s[len] == '') continue; //处理前缀0 /*1.处理前面最后一段比j短的情况(即数字一定比j小)*/
dp[i][j] = sum[len - ][j - ]; //sum[i][j]表示前i长度,最后一个长度为小于j的方法总数 /*2.处理前面最后一段和j相等的情况*/
int tmp = len - j;
if (tmp < ) continue; //前面总长度没有j长
if (check(tmp,len) && lcp[tmp][len] < j) //判断j这段是否满足条件
{
dp[i][j] = (dp[i][j] + dp[len - ][j]) % mod;
}
}
for (int j = ; j <= n; j++)
{
sum[i][j] = (sum[i][j - ] + dp[i][j]) % mod;
}
}
}
int main(){
cin >> n >> s;
s = " " + s;
/*求出最长公共前缀lcp,用于快速比较两个数的大小
如果lcp[a][b] >= len,说明两个数字相等
否则比较s[a+lcp[a][b]]和s[b+lcp[a][b]]即可
*/
getLcp(); //最长公共前缀lcp
solve();
ll ans = ;
for (int i = ; i <= n; i++)
{
ans = (ans + dp[n][i]) % mod;
}
cout << ans << endl;
return ;
}
CF611D lcp+dp的更多相关文章
- Codeforces 822E Liar dp + SA (看题解)
Liar 刚开始感觉只要开个dp[ i ][ j ][ 0 / 1 ]表示处理了s的前 i 个用了 k 段, i 是否是最后一段的最后一个字符 的 t串最长匹配长度, 然后wa24, 就gg了.感觉这 ...
- Codeforces_825
A.连续1的个数,0用来分割,注意连续的0. #include<bits/stdc++.h> using namespace std; int n; string s; int main( ...
- CF1073G Yet Another LCP Problem 后缀自动机 + 虚树 + 树形DP
题目描述 记 $lcp(i,j)$ 表示 $i$ 表示 $i$ 这个后缀和 $j$ 这个后缀的最长公共后缀长度给定一个字符串,每次询问的时候给出两个正整数集合 $A$ 和 $B$,求$\sum_{i\ ...
- 树形DP+RMQ+单调队列(Bob’s Race HDU4123)
题意:有n个房子,这些房子被n-1条道路连接,有一些运动员从一个房子为起点尽可能跑最远的距离且不能通过一条道路超过两次,这些运行员不能选择同样的起点,这些运动员跑的最远距离和最近距离的差值不能超过Q, ...
- 来自多校的一个题——数位DP+卡位
n<=1e9就要考虑倍增.矩阵乘法这种了 假设L=0 考虑枚举二进制下,所有X与R的LCP长度,前len高位 对于第len+1位,假设R的这一位是1 如果一个x的这一位是0了,那么后面可以随便填 ...
- 【做题】ECFinal2018 J - Philosophical … Balance——dp
原文链接 https://www.cnblogs.com/cly-none/p/ECFINAL2018J.html 题意:给出一个长度为\(n\)的字符串\(s\),要求给\(s\)的每个后缀\(s[ ...
- Codeforces Round #422 (Div. 2)E. Liar sa+st表+dp
题意:给你两个串s,p,问你把s分开顺序不变,能不能用最多k段合成p. 题解:dp[i][j]表示s到了前i项,用了j段的最多能合成p的前缀是哪里,那么转移就是两种,\(dp[i+1][j]=dp[i ...
- Educational Codeforces Round 53 (Rated for Div. 2)G. Yet Another LCP Problem
题意:给串s,每次询问k个数a,l个数b,问a和b作为后缀的lcp的综合 题解:和bzoj3879类似,反向sam日神仙...lcp就是fail树上的lca.把点抠出来建虚树,然后在上面dp即可.(感 ...
- BZOJ.4199.[NOI2015]品酒大会(后缀自动机 树形DP)
BZOJ 洛谷 后缀数组做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 只考虑求极长相同子串,即所有后缀之间的LCP. 而后缀的LCP在后缀树的LCA处.同差异这道题,在每个点处 ...
随机推荐
- 初学Django项目可能会遇到的问题
1. 出现莫名其妙的 app01 我项目中的app名字并不是app01,可是运行python manage.py makemigrations的时候总是提示app01不是已安装的app Applyin ...
- Docker(1):CentOS7 安装Docker
1.查看系统内核,docker要求系统的内核版本高于3.10 # uname -r 2.升级yum包,确保最新 # yum update 3.安装所需要依赖包 # yum install - ...
- SQL CREATE DATABASE 语句
CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库. SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL ...
- ✔ OI Diary ★
一 | 2019-3-28 1.整晨,云之考矣,暴后皆不会,邃无感而写斯普雷尔,然则午后知暴可六十哉. 然则斯普雷毙,虽特判之矣,然则暴只判二十哉,呜呼! 2.午间归宿,视白购书一本,目触,感之甚集 ...
- Docker 安装 MySQL
1. docker search mysql 2.docker pull mysql/mysql-serer 3.mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/ ...
- js 对日期处理
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...
- 跳出语句break 和continue
关键字break 常见的两种用法 在switch语句当中,一旦执行,整个switch语句立刻结束 在循环语句当中,一旦执行,整个循环语句立刻结束.跳出循环 代码举例: public class Dem ...
- (haut oj 1261 ) 地狱飞龙 利用不定积分求值
题目链接:http://218.28.220.249:50015/JudgeOnline/problem.php?id=1261 题目描述 最近clover迷上了皇室战争,他抽到了一种地狱飞龙,很开心 ...
- Kubernetes一键部署利器:kubeadm
要真正发挥容器技术的实力,你就不能仅仅局限于对 Linux 容器本身的钻研和使用. 这些知识更适合作为你的技术储备,以便在需要的时候可以帮你更快的定位问题,并解决问题. 而更深入的学习容器技术的关键在 ...
- jquery实现点击控制div的显示和隐藏
我们使用点击显示.点击隐藏的时候,一般有两种可选方案 .示例 html <div class="index"> <h1> 首页 </h1> &l ...